2021/3/1 : Dart : A tour of the Dart language,Generatorsの訳

Generators

 

値のシーケンス(集合)を遅延生成する必要がある場合は、ジェネレーター関数(generator function)の使用を検討してください。

Dartには、次の2種類のジェネレーター関数のサポートが組み込まれています。

Synchronous generator:Iterableオブジェクトを返す。

Asynchronous generator:Streamオブジェクトを返す。

 

Synchronous generator関数を実装(定義)するには、下記のように関数のボディの前に

sync*

をつけます。そして、関数ボディ内で

yeild

を用いて、要素を生成します。

Iterable<int> naturalsTo(int n) sync* {
  int k = 0;
  while (k < n) yield k++;
}

Asynchronous generator関数を実装(定義)するには、下記のように関数のボディの前に

async*

を付けます。そして関数ボディ内で

yeild

を用いて、要素(イベント)を生成します。

Stream<int> asynchronousNaturalsTo(int n) async* {
  int k = 0;
  while (k < n) yield k++;
}

 


generator関数を再帰的に使用すれば、yeild*を使ってパフォーマンスを上げることができます。

Iterable<int> naturalsDownFrom(int n) sync* {
  if (n > 0) {
    yield n;
    yield* naturalsDownFrom(n - 1);
  }
}

 

参考

https://dart.dev/guides/language/language-tour

https://dart.dev/guides/language/language-tour#generators

コメントを残す

メールアドレスが公開されることはありません。