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
Dart's Async Stream<T> gotchas
Search
UEHARA Junji
March 29, 2018
Technology
170
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Dart's Async Stream<T> gotchas
About Dart's async Stream and syntax sugers, async*, await for...
UEHARA Junji
March 29, 2018
More Decks by UEHARA Junji
See All by UEHARA Junji
Dart Isolate, Port and Capabilities
uehaj
5
1.1k
Other Decks in Technology
See All in Technology
AWS DevOps Agent スキルをつかいこなそう / Master AWS DevOps Agent Skills
kinunori
1
420
なぜ「決定性」が 決定的に重要なのか? Durable Execution 基盤の数理的理解 #serverlessjp / ServerlessDays Tokyo 2026
ytaka23
4
1.3k
エージェントはローカル、検証はMicroVM — Lambda MicroVMsでつくるServerless CI
fujioka6789
3
780
バイブコーディング時代のWebアプリ開発入門~Cloud Runで学ぶセキュアなビルドとデプロイ
waiwai2111
1
150
ほんとうの信頼性はヒーローが死んでからはじまる / True reliability begins after the hero dies
vtryo
0
120
AWS FinOps Agent 結局何が得意なの?
siromi
0
150
SREへの勘違いに気づいた後の話
tomodakengo
0
150
事業課題から技術的負債に向き合う
sansantech
PRO
2
2.3k
【ゲームメーカーズスクランブル2026】『Shadowverse: Worlds Beyond』UIとアニメーションで実現する最高のユーザー体験を叶えるプロトタイピング
cygames
PRO
1
360
Claude Codeを「使うほど育つ」AI秘書にするノウハウ
minorun365
PRO
33
32k
【技術的負債conf】事業成長に伴う技術的負債の説明責任とAIによるモニタリング、認知的負債について
i35_267
4
2.1k
AI Agent入門〜今更聞けないAgentの話〜
hiromimaganuma
0
110
Featured
See All Featured
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Heart Work Chapter 1 - Part 1
lfama
PRO
10
36k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
250
Become a Pro
speakerdeck
PRO
31
6.3k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
520
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
670
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
730
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Transcript
Dartの非同期ストリーム 周りをちょっと見てみる NTTςΫϊΫϩεגࣜձࣾ ্ݪ५ೋ Dart Meetup Tokyo #4 2018/3/29
ࣗݾհ ্ݪ५ೋ(@uehaj) ॴଐ: NTTςΫϊΫϩεגࣜձࣾ ͖ͳݴޠ() Groovy,Elm,Rust,Haskell,JavaScript(React/Redux/ Redux-Saga,Cordova, ReactNative), Dart [new!]
ॻ੶ ϓϩάϥϛϯάGroovy(ٕධ) Grailsపఈೖ(ᠳӭࣾ)
͡Ίʹ Dartݴޠɺྑ͍Ͱ͢Ͷ! 2013ʹࢼͯ͠Ҏདྷ5ͿΓ2 ྑ͍ͱࢥͬͨ͜ͱ ฏ໌ɺৗࣝతɺྑ͍ͱ͜ͲΓ ଞݴޠͷܦݧ͔Βྨਪ͕ޮ͖ͦ͏ ͰݟͳΕ͵ͷ͋Δ async*, await for
͢͜ͱ Dartͷؔఆٛͷम০ࢠ(async, async*, sync*) ͬͯԿ? ಛʹasync* Ͳ͏͍Θ͚Δͷ? await for Stream<T>
ؔम০ࢠ ྫ ໊শ ΧδϡΞϧͳઆ໌ म০ͳ͠ T func() {} ؔ
ී௨ͷؔ async Future<T> func() async {} ඇಉظؔ BTZODGVODUJPOT +4$ͷBTZODؔ sync* Iteratable<T> func() sync* {} ಉظδΣωϨʔλ (synchronous generators) JS/PythonͷδΣωϨʔλ async* Stream<T> func() async*{} ඇಉظδΣωϨʔλ (asynchronous generators) ???
Stream<T> is Կ? ୯Ұ ෳ ಉظ T Iterable<T> ඇಉظ Future<T>
Stream<T> • ͜͜Ͱͷ”ඇಉظ”ʮݱεϨουͰ͕औΕͳ͍ʯఔͷҙ • StreamʹෳϦεφΛొͰ͖ΔϒϩʔυΩϟετετϦʔϜ ͱɺҰ͔ͭ͠ొͰ͖ͳ͍୯ҰొετϦʔϜ͕͋Δ͕(ܕಉ ͡)ɺasync*୯ҰొετϦʔϜΛฦ͢ɻ
StreamͱIterableͷҧ͍
म০ͷޮՌ ྫ ؔͰ͑Δ return await await for yield yield* म০ͳ͠
T func() {} ✔ × × × × async Future<T> func() async {} ✔ ✔ ✔ × × sync* Iteratable<T> func() sync* {} × × × ✔ ✔ async* Stream<T> func() async*{} × ✔ ✔ ✔ ✔
async*ؔम০ࢠͱ தͰawait(for)͕͑Δ ඇಉظॲཧΛಉظॲཧͷΑ͏ʹॻ͚Δ தͰyield͕͑Δ Stream<T>Λฦ͢δΣωϨʔλ(త)ؔ StreamContorllerΛͬͨStreamੜίʔυͷγϯ λοΫεγϡΨʔ
async*Λ͏ͱ͖ yieldͰStream<T>Λ৽نʹɺ͘͠ผͷStreamΛՃ ͯ͠࡞Δ ผͷStream<T>Λyield*Ͱ݁߹͢Δ ετϦʔϜॲཧΛݟ͘͢ॻ͖͍ͨ c.f. RxDart, flutter.async.*
await forͬͯԿ? ετϦʔϜʹର͢ΔҎԼͷॲཧΛforϧʔϓΆ͘ॻ͘γϯλοΫεγϡ Ψʔ A. ཁૉճ࣮ߦ͞ΕΔΠϕϯτϋϯυϥઃఆ B. (Ωϟϯηϧ࣌Τϥʔϋϯυϥઃఆ) C. Ұ࿈ͷΠϕϯτϋϯυϥ࣮ߦ͕ྃͨ͠ͱ͖ͷඇಉظίʔϧόο
Ϋઃఆ D. Cʹ͍ͭͯawait ඍົɾෆศ ແݶετϦʔϜʹద༻͢ΔͱɺCDʹ౸ୡ͠ͳ͍ CͰͷFutureͰൃੜ͢Δඇಉظྫ֎ΛߏจతʹΩϟονͰ͖ͳ͍
await forγϯλοΫεγϡΨʔ try { await for (elem in stream) {
AAA } } catch (e) { BBB } CCC stream.listen((elem) { AAA }, onError: (e) { BBB }, onDone: () { CCC } );
await forॊೈੑ͕͍ listen()ͳΒ ແݶετϦʔϜΛѻ͑Δ listen()͕ฦ͢StreamSubscriptionΛasFeature()Ͱ FutureԽͯ͠onErrorΛϋϯυϧͰ͖Δɻ
Stream<T>Dartඪ४ϥΠϒϥϦͷͲ ͜ͰΘΕ͍ͯΔ͔ DOMΠϕϯτɺWebSocketΫϥΠΞϯτ (dart:html) ϑΝΠϧIOɺHTTP/WebSocketαʔό(dart:io) ΞΠιϨʔτؒ௨৴ʹ͏ReceivePort
Stream<T>Flutter SDKͷͲ͜ͰΘ Ε͍ͯΔ͔ StreamBuilder: Stream͔ΒWidgetΛੜ EventChannel.StreamHandler: ωΠςΟϒϞ δϡʔϧ͔ΒDartͷσʔλड৴ flutter.async.*Stream* GUIΠϕϯτॲཧStreamͰͳ͍
[※] https://medium.com/@svenasse/flutter-event-channels-89623ce6c017
·ͱΊ async*ɺStreamΛδΣωϨʔλͷΑ͏ʹॻͨ͘Ί ͷγϯλοΫεγϡΨʔͰͨ͠ Stream<T>Λཧղ͢Δඞཁ͕͋Δ ←ॏཁ
ࢀߟࢿྉ Dart Language Asynchrony Support: Phase 2 https://www.dartlang.org/articles/language/beyond- async ϓϩάϥϛϯάݴޠDartͷجૅ
https://www.cresc.co.jp/tech/java/Google_Dart/ DartLanguageGuide.pdf