Generators
값의 시퀀스를 게으르게(lazily) 생성해야 하는 경우, 제너레이터(generator) 함수를 사용하는 것이 좋습니다. Dart는 두 종류의 제너레이터 함수를 내장하고 있습니다:
동기(generator) 함수를 구현하려면, 함수 본문을 sync*
로 표시하고 yield
문을 사용하여 값을 전달하면 됩니다.
Iterable<int> naturalsTo(int n) sync* {
int k = 0;
while (k < n) yield k++;
}
비동기(generator) 함수를 구현하려면, 함수 본문을 async*
로 표시하고 yield
문을 사용하여 값을 전달하면 됩니다.
Stream<int> asynchronousNaturalsTo(int n) async* {
int k = 0;
while (k < n) yield k++;
}
제너레이터(generator)가 재귀적(recursive)인 경우, yield*을 사용하여 성능을 향상시킬 수 있습니다:
Iterable<int> naturalsDownFrom(int n) sync* {
if (n > 0) {
yield n;
yield* naturalsDownFrom(n - 1);
}
}
Last updated