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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
UEHARA Junji
March 29, 2018
Technology
1
160
Dart's Async Stream<T> gotchas
About Dart's async Stream and syntax sugers, async*, await for...
UEHARA Junji
March 29, 2018
Tweet
Share
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
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
270
MCPでつなぐElasticsearchとLLM - 深夜の障害対応を楽にしたい / Bridging Elasticsearch and LLMs with MCP
sashimimochi
0
170
SREじゃなかった僕らがenablingを通じて「SRE実践者」になるまでのリアル / SRE Kaigi 2026
aeonpeople
6
2.3k
茨城の思い出を振り返る ~CDKのセキュリティを添えて~ / 20260201 Mitsutoshi Matsuo
shift_evolve
PRO
1
260
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
17k
クレジットカード決済基盤を支えるSRE - 厳格な監査とSRE運用の両立 (SRE Kaigi 2026)
capytan
6
2.7k
生成AI時代にこそ求められるSRE / SRE for Gen AI era
ymotongpoo
5
3.2k
プロダクト成長を支える開発基盤とスケールに伴う課題
yuu26
4
1.3k
Bill One急成長の舞台裏 開発組織が直面した失敗と教訓
sansantech
PRO
2
370
コスト削減から「セキュリティと利便性」を担うプラットフォームへ
sansantech
PRO
3
1.5k
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
640
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
930
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
72
12k
Git: the NoSQL Database
bkeepers
PRO
432
66k
First, design no harm
axbom
PRO
2
1.1k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
730
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
340
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
170
The Language of Interfaces
destraynor
162
26k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
240
Building Adaptive Systems
keathley
44
2.9k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Abbi's Birthday
coloredviolet
1
4.7k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
3.9k
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