Flutter学習メモ:非同期処理
ちょっと前からFlutterのお勉強をしていたのですが、なんやかんやあって間が空いてしまったので復習ついでに学んだことを整理していきます。
今回は非同期処理について。FlutterはJavaScript界隈から考え方を取り入れているところが多々あるのですが、非同期処理はまさにそのひとつです。
基本の仕組み
シングルスレッドモデルとevent loopです。モダンなJavaScriptやNode.jsと同じですね。
2014年の記事(翻訳元の記事は2013年)とちょっと古いですが、The Event Loop and Dart (翻訳)に詳しく書かれています。
ほかにisolateという仕組みもあります。各isolateは独立したメモリ領域を持ち、isolates間でのやり取りはメッセージで行います。頻繁に使うものではなさそうなので、必要に迫られるまでは気にしなくてよいかと。
非同期処理の書き方
これもJavaScriptっぽいアプローチ。JavaScriptでいうところのPromiseに当たるものがFuture、それを読み書きしやすくしてくれるのがasync/awaitという理解でよさそうです。
それとは別にstreamも用意されています。Reactive Programming的なことをするための仕組みですね。
- DartのFutureを使って非同期処理を書く
- Dart 非同期処理の async / await について / 桃缶食べたい。
- Dartにおける非同期プログラミングとエラーハンドリング
- Dart で非同期処理を記述する (Future と Stream)
Reactive的なことに慣れているならstreamを存分に使い、そうでないならasync/awaitを使う、という感じでしょうか。自分は(残念ながら?)後者です...
所感
自分はAndroidがメインなのでUI threadとbackground threadという考え方が染みついているのですが、FlutterはJavaScriptチックで全然違うので頭を切り替えないとなりません。ちょっとツライ...
Clean Architectureを採用し、UseCaseの呼び出しは必ず非同期にするというルールにしておくとthreadはほとんど意識しなくて済むのですよね。
Flutterの場合、どこにasync/awaitを押し込むべきなのか、もしくはあちこちに点在したままでよいのか、といったあたりが自分の中でしっくりきていません。もっと勉強せねば...
関連(するかもしれない)記事
おススメ