【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part39 Dartの特徴
「基礎 から 学ぶ Flutter 」という書籍で 学習 したことを ブログでアウトプットしていこうと思います。今回は Dart編 ( part39 )です。
前回
【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part38 Dartの特徴
今回は非同期ジェネレータの学習です。
Dartの特徴
非同期ジェネレータ
非同期ジェネレータはその名の通り、非同期で処理が進むジェネレータです。
同期ジェネレータと違うのは以下の部分です。
- 戻り値の型が
Stream型
となる - 同期ジェネレータで
sync*
と記述していた部分はasync*
になる yield
の引数にはFuture
クラスを指定する- 非同期ジェネレータ内の処理では
await
を使用する
Stream<int> fetchDoubles(int start, int end) async* {
for (int i = start; i <= end; i++) {
yield await fetchDouble(i);
}
}
Future<int> fetchDouble(int val) {
// 1秒スリープ、成功したら与えられた値の2倍の値を返します。
return Future.delayed(Duration(seconds: 1)).then((_) {
return val * 2;
});
}
main(){
print('開始します。');
//fetchDoubles(1, 10).listen((v) => print(v));
// 以下の実装は、上記の実装と同じです。
fetchDoubles(1, 10).listen(print);
// どのタイミングで出力されるでしょうか?
print('終了します。');
}
実行すると以下のように動作します。
実行結果からわかるように「開始します。」の直後に「終了します。」が出力されています。
fetchDoublesの部分が非同期であることがわかりますね。
最後に
再起処理の場合、同期ジェネレータ同様にyield*
キーワードを使えばよいようです。
今日はここまで!
ディスカッション
コメント一覧
まだ、コメントがありません