當您需要延遲地生成一個值序列時,請考慮使用生成器函數。Dart內置支持兩種生成器函數:
* 同步生成器:返回Iterable對象
* 異步生成器:返回Stream對象
要實現同步生成器函數,將函數體標記為sync*,并使用yield語句傳遞值:
~~~
Iterable<int> naturalsTo(int n) sync* {
int k = 0;
while (k < n) yield k++;
}
~~~
要實現異步生成器函數,將函數體標記為async*,并使用yield語句傳遞值:
~~~
Stream<int> asynchronousNaturalsTo(int n) async* {
int k = 0;
while (k < n) yield k++;
}
~~~
如果您的生成器是遞歸的,您可以使用yield*來改進它的性能:
~~~
Iterable<int> naturalsDownFrom(int n) sync* {
if (n > 0) {
yield n;
yield* naturalsDownFrom(n - 1);
}
}
~~~
有關生成器的更多信息,請參閱文章[Dart語言異步支持:Phase 2]。