Dartのジェネレータ
概要
Dartでは、関数の後ろにsync*を付けることでジェネレータを定義することが出来る。
ここのsyncとは同期という意味で、非同期に対して同期としている。
コード例
// [0, max)の整数列を返すiota関数
Iterable<int> iota(int max) sync* {
for(int i = 0; i < max; ++i) {
yield i;
}
}
// main
// 実行結果
// 0
// 1
// 2
// 3
// 4
void main() {
for(final n in iota(5)) {
print(n);
}
}
ここのnには、上で定義されているsync*関数で返された値がiに格納される。
ストリーム
簡単にStreamを作ってみる
これだけでも、streamが機能する。
元記事へのリンク Stream<int> doSquare(int n) async* { yield n * n; } void main(){ doSquare(2).listen((newValue){ print("$newValue"); }); }