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");
	});
}
元記事へのリンク