Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
phpkaigi2022_LT_slide_nukisashineko
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
nukisashineko
April 10, 2022
Programming
0
1.8k
phpkaigi2022_LT_slide_nukisashineko
nukisashineko
April 10, 2022
Tweet
Share
More Decks by nukisashineko
See All by nukisashineko
チームメンバーをエンパワーメントしよう! レガシープロジェクト改善事始め
nukisashineko
0
1.2k
Other Decks in Programming
See All in Programming
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
2.3k
[AI Engineering Summit Tokyo 2025] LLMは計画業務のゲームチェンジャーか? 最適化業務における活⽤の可能性と限界
terryu16
2
530
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
390
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
420
ゆくKotlin くるRust
exoego
1
210
gunshi
kazupon
1
140
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
200
Python札幌 LT資料
t3tra
7
1.1k
CSC307 Lecture 03
javiergs
PRO
1
480
Pythonではじめるオープンデータ分析〜書籍の紹介と書籍で紹介しきれなかった事例の紹介〜
welliving
3
850
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
940
Fluid Templating in TYPO3 14
s2b
0
110
Featured
See All Featured
Being A Developer After 40
akosma
91
590k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
2.9k
Google's AI Overviews - The New Search
badams
0
890
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
710
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
150
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.6k
Claude Code のすすめ
schroneko
67
210k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.1k
Getting science done with accelerated Python computing platforms
jacobtomlinson
1
100
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
0
1.8k
Transcript
何でもキレイに iterationする方法 を考える in PHP ぬさし(@nukisashineko) 1/21
foreach スパゲッティー 経験ある? なぜなのか? FOREACHって実は難しい 自分はよくある レビューでもみかける 何もしてないのに…… すぐ複雑化する 2/21
変換 列の追加、 値の書き換え、 特定列の抽出 配列操作の基本 これらを一緒にやるからスパゲッティーになる グルーピング フィルター 配列の区切り追加 集約
小計の算出 groupby ※全ての配列を評価する … … … … 3/21
変換・グルーピング・集約が無秩序 奇数の場合は2乗した値に置き換えて! 偶数・奇数で配列を分けてほしい! 分けた配列の各小計を出してほしい! range(1, 10) という配列を 問題1-解:単純 一 つ
の F O E A C H に 全 部 詰 め ち ゃ っ た 4/21
変換・グルーピング・集約を整理 奇数の場合は2乗した値に置き換えて! 偶数・奇数で配列を分けてほしい! 分けた配列の各小計を出してほしい! range(1, 10) という配列を 問題1-解:区切 F O
R E A C H 処 理 毎 に 分 け て 見 通 し よ く 5/21
変換・グルーピング・集約の関数化 奇数の場合は2乗した値に置き換えて! 偶数・奇数で配列を分けてほしい! 分けた配列の各小計を出してほしい! range(1, 10) という配列を 問題1-解:分割 関 数
に 分 け る こ と で M A I N が す っ き り 6/21
変換 (e.g. array_cloumn, array_map ) 配列操作の基本 これらを一緒にやるからスパゲッティーになる グルーピング (e.g. array_filter,
array_ chunk ) 集約 (e.g. array_sum, array_reduce ) … … … … 7/21
変換 列の追加、 値の書き換え、 特定列の抽出 配列操作の基本 これらを一緒にやるからスパゲッティーになる グルーピング フィルター 配列の区切り追加 集約
小計の算出 groupby ※全ての配列を評価する … … … … 8/21
変換 列の追加、 値の書き換え、 特定列の抽出 配列操作の基本 これらを一緒にやるからスパゲッティーになる グルーピング フィルター 配列の区切り追加 集約
小計の算出 groupby ※全ての配列を評価する 遅延・並列処理 計算処理の中断 非同期処理の同時実行 ※1、2個目の特殊例 9/21
変換・グルーピングの特殊例 遅延処理 通常処理と遅延処理の違い 配列 ~~~ 配列 関数 関数実行前:通常処理 関数実行後:通常処理 関数実行前:遅延処理
関数実行後:遅延処理 先頭5個を取得:遅延処理 undefined 値有り 関数有り 10/21
遅延処理 (Generator) <yield記法> return を利用しない書き方 配列へのappend 記述行を yield と置き換え 遅延処理:書き方
記 法 だ け 記 す 、 実 際 の 置 き 換 え は 後 で 11/21
変換の特殊例 並列処理 通常処理と並列処理の違い 配列 ~~~ 配列 関数 0step実行後:通常処理 1step実行後:通常処理 2step実行後:通常処理
0step実行後:並列処理 1step実行後:並列処理 undefined 値有り 関数有り 12/21
並列処理 (Generator+ Promise) Promiseだけで書くとforeachが複雑化する Generator + Promise と覚えること 補足: Promise
= 非同期処理 並列処理:書き方 記 法 だ け 記 す 、 実 際 の 置 き 換 え は 後 で 13/21
変換・グルーピング・集約の関数化 奇数の場合は2乗した値に置き換えて! 偶数・奇数で配列を分けてほしい! 分けた配列の各小計を出してほしい! range(1, 10) という配列を 問題1-解:分割 さ っ
き の 問 題 の お さ ら い 14/21
変換・グルーピングの遅延化 奇数の場合は2乗した値に変換!(APIで) 偶数・奇数で配列を分けてほしい! 先頭各5個ずつまで 分けた配列の各小計を出してほしい! ※無駄な取得・計算をなるべくしない range(1, 100) という配列を 問題2-解:遅延
遅 延 処 理 に 置 き 換 え 、 変 更 点 は 次 ペ ー ジ 15/21
問題1と2の解比較(抜粋・遅延)
問題1と2の解比較(抜粋・並列)
変換・グルーピングの遅延化 奇数の場合は2乗した値に変換!(APIで) 偶数・奇数で配列を分けてほしい! 先頭各5個ずつまで 分けた配列の各小計を出してほしい! ※無駄な取得・計算をなるべくしない range(1, 100) という配列を 問題2-解:遅延
お さ ら い 、 問 題 が 非 効 率 で 例 に 適 さ な い 18/21
習った問題を身近に感じる ユーザーに変換してほしい(APIで) deleted_atで配列を分けてほしい! 先頭各5個ずつまで 課金額の各小計を出してほしい! ※無駄な取得・計算をなるべくしない range(1, 100) という配列を 問題3-解:具象例
変 換 ・ グ ル ー ピ ン グ ・ 集 約 を 意 識 す る 19/21
キレイに ITERATION する方法のまとめ 配列操作を分類整理して、1つのforeachで1つのことだけ行うことを心がける 特殊な処理を分離 遅延処理 Genarator を利用する 並列処理 Promise
+ Genarator を利用する 関数に分ける 処理をわかりやすく書く hint: 短縮記述の標準関数を覚える 処理毎にFOREACHを分ける 変換 グルーピング 集約 20/21
ご清聴ありがとう ございました。 21/21
以後資料用ページ
リンク 今回のソースコード ・https://github.com/nukisashineko/phpkaigi2022-lt-beautiful-iteration- guide 参考資料 ・https://docs.guzzlephp.org/en/stable/quickstart.html#async-requests その他 ・資料作成 ・https://www.canva.com/ ・スライド公開先URL
・https://speakerdeck.com/nukisashineko/phpkaigi2022-lt-slide- draftfalsekopifalsekopi-3