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
Dart's Async Stream<T> gotchas
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
【CEDEC2026】『Relink』を拡張せよ - 『GRANBLUE FANTASY: Relink - Endless Ragnarok』の開発速度と品質を守るCI運用
cygames
PRO
0
170
【CEDEC2026】コードレビュー支援ツール開発から学ぶ:LLMを用いた業務システムの実践的な運用設計と誤出力対策
cygames
PRO
0
790
え?フロントエンドエンジニアの ワイがインフラも!?
puku0x
1
580
制約理論(ToC)入門 2026版
recruitengineers
PRO
8
2.3k
その“隠したつもり”が命取り ── 自前と平文をやめて「正解」に委ねる
kuroneko13
0
120
私がブラウザを自作したくなった理由
supurazako
1
230
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.2k
SO-101×VLAによる3色キューブのピック&プレース
abeja
0
200
Goでデータパイプラインを作ろう
sansantech
PRO
1
450
サイバー捜査員研修(後半)
nomizone
1
870
侵入は突然に 〜 IoTマルウェアと悪用される家庭の機器 ~ / When Intrusion Strikes: IoT Malware and the Abuse of Home Devices
nttcom
0
5.5k
AIコーディングの次。コードレビューと理解負荷を解消して組織の開発生産性を高める
moongift
PRO
2
2.6k
Featured
See All Featured
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
260
Marketing to machines
jonoalderson
1
5.7k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Designing Experiences People Love
moore
143
24k
The Spectacular Lies of Maps
axbom
PRO
1
910
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
How to Ace a Technical Interview
jacobian
281
24k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
640
The Pragmatic Product Professional
lauravandoore
37
7.4k
Google's AI Overviews - The New Search
badams
0
1.1k
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