Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
PHP Generatorまとめ
Search
rightgo09
May 14, 2015
Programming
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PHP Generatorまとめ
rightgo09
May 14, 2015
Other Decks in Programming
See All in Programming
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
390
R8 の設定見直しでアプリサイズ削減
andpad
0
220
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
150
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
430
TechTown - Creating Composable Callables in Contemporary C++
rollbear
0
130
Simple Storage Service(S3) is not simple
iwatsukayura
0
290
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
180
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
500
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
410
パスワード再設定メールのURLについて知っておこう
uyuki234
0
160
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
660
APNsからLive Activityを開始する話
yumnumm
0
170
Featured
See All Featured
Speed Design
sergeychernyshev
33
2.2k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
300
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
430
The browser strikes back
jonoalderson
0
1.8k
A Soul's Torment
seathinner
8
3.8k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
330
Prompt Engineering for Job Search
mfonobong
0
520
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
530
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
410
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
500
Transcript
1)1δΣωϨʔλ·ͱΊ !SJHIUHP (PPEUPLOPXUIF1)1(FOFSBUPS
࣍ w δΣωϨʔλͱ w ϝϦοτͱσϝϦοτ w ͬͯΈΔɹͦͷ̍ɹδΣωϨʔλؔ w ͬͯΈΔɹͦͷ̎ɹলϝϞϦ w
ͬͯΈΔɹͦͷ̏ɹTFOE w ·ͱΊ "UBCMFPGDPOUFOUT
δΣωϨʔλͱ w δΣωϨʔλɺϓϩάϥϜʹ͓͍ͯɺྻͷ֤ཁ ૉͷͳͲΛ࣍ʑͱੜʢδΣωϨʔτʣ͠ଞͷख ଓ͖ʹ͢ɺͱ͍͏ػೳΛ͍࣋ͬͯΔखଓ͖Ͱ͋Δɻ w Λ͢ํ๏ͱͯ͠ɺίʔϧόοΫͷΑ͏ʹͯ͠ଞ ͷखଓ͖ΛݺͿͷ͋Εɺݺͼग़͞ΕΔʹ࣍ʑ ͱҟͳΔΛฦؔ͢Ͱ͋Δ͜ͱ͋Δɻ 8IBUJT(FOFSBUPS
δΣωϨʔλͱ w δΣωϨʔλΛ͑ɺγϯϓϧͳΠςϨʔλΛ ؆୯ʹ࣮Ͱ͖·͢ɻ*UFSBUPSΠϯλʔϑΣΠε Λ࣮ͨ͠ΫϥεΛ༻ҙ͢ΔΦʔόʔϔουෳ ࡶ͞Λ৺͢Δඞཁ͋Γ·ͤΜɻ 8IBUJT(FOFSBUPS
✤ ϝϦοτ ✤ ΠςϨʔλ͕؆୯ʹͭ͘ΕΔʢγϯϓϧʹͳΔʣ ✤ লϝϞϦ ✤ σϝϦοτ ✤ લʹ͔͠ਐΊͳ͍
ϝϦοτͱσϝϦοτ (PPEBOE#BEQPJOU
w ೋ࣍ݩྻΛϧʔϓ ͬͯΈΔͦͷ̍ &YBNQMF
<?php $reward_list = [ [13, 67, 23], // 1戦目の報酬 [2,
87, 30], // 2戦目の報酬 [85, 25, 41], // 3戦目の報酬 ]; // 普通の二次元ループ foreach ($reward_list as $rewards) { foreach ($rewards as $reward) { echo "\$reward -> $reward\n"; } } ͬͯΈΔͦͷ̍ &YBNQMF
<?php $reward_list = [ [13, 67, 23], // 1戦目の報酬 [2,
87, 30], // 2戦目の報酬 [85, 25, 41], // 3戦目の報酬 ]; // ジェネレータ(を返す関数) function reward_generator($reward_list) { foreach ($reward_list as $rewards) { foreach ($rewards as $reward) { yield $reward; } } } foreach (reward_generator($reward_list) as $reward) { echo "\$reward -> $reward\n"; } ͬͯΈΔͦͷ̍ &YBNQMF
ͬͯΈΔͦͷ̍ &YBNQMF <?php // ジェネレータ(を返す関数) function reward_generator($reward_list) { foreach ($reward_list
as $rewards) { foreach ($rewards as $reward) { yield $reward; } } } // 別パターン $g = reward_generator($reward_list); while ($g->valid()) { $reward = $g->current(); echo "\$reward -> $reward\n"; $g->next(); } ΠςϨʔλ
w େ͖ͳSBOHFͰলϝϞϦʹΠςϨʔτ w IUUQQIQOFUNBOVBMKB MBOHVBHFHFOFSBUPSTPWFSWJFXQIQ ͬͯΈΔͦͷ̎ &YBNQMF
<?php // 一気飲みパターン foreach (range(0, 1000000) as $val) { $sum
+= $val; } // ジェネレータ関数 function xrange($start, $end) { for ($i = $start; $i <= $end; $i++) { yield $i; } } foreach (xrange(0, 1000000) as $val) { $sum += $val; } ͬͯΈΔͦͷ̎ &YBNQMF time: 0.2835 memory (byte): 144965632 time: 0.8537 memory (byte): 262144
w ZJFME͔Βͷฦ٫ w (FOFSBUPSTFOE Λ͏ ͬͯΈΔͦͷ̏ &YBNQMF
ͬͯΈΔͦͷ̏ &YBNQMF <?php function sum_generator($count) { $sum = 0; foreach
(range(1, $count) as $i) { $sum += (yield $i); // 要括弧 } echo $sum; } $g = sum_generator(10); while ($g->valid()) { $num = $g->current(); $g->send($num * 2); // sendでyield自体の返り値とできる // $g->next(); // sendは自動的に進むのでnextしなくてよい }
ͬͯΈΔͦͷ̏ &YBNQMF # Rubyなら def sum_generator(count) sum = 0 1.upto(count)
do |i| sum += yield i end sum # 返り値 end sum = sum_generator(10){|i| i * 2}
ͬͯΈΔͦͷ̏ &YBNQMF <?php function sum_generator($count) { $sum = 0; foreach
(range(1, $count) as $i) { $sum += (yield $i); // 要括弧 } return $sum; } ... $sum = $g->getReturn(); // こうできたらいい • こうだったらいい • PHP7 RFC • https://wiki.php.net/rfc/generator-return-expressions
·ͱΊ w δΣωϨʔλΛ͏ͱΠςϨʔγϣϯ͕γϯϓϧʹ ͳΔ w Λଟগ٘ਜ਼ʹͯ͠ɺϝϞϦΛઅͰ͖Δ w ZJFMEͷฦΓTFOEΛ͏ $PODMVTJPOT
͓ΘΓ