[Dart] Dart-02-13: Generators
Dart-02: Language Tour | ||
---|---|---|
Dart-02-01 | Important concepts | |
Dart-02-02 | Keywords | |
Dart-02-03 | Variables | |
Dart-02-04 | Built-in types | |
Dart-02-05 | Functions | |
Dart-02-06 | Operators | |
Dart-02-07 | Control flow statements | |
Dart-02-08 | Exceptions | |
Dart-02-09 | Classes | |
Dart-02-10 | Generics | |
Dart-02-11 | Libraries and visibility | |
Dart-02-12 | Asynchrony support | |
Dart-02-13 | Generators | |
Dart-02-14 | Callable classes | |
Dart-02-15 | Isolates | |
Dart-02-16 | Typedefs | |
Dart-02-17 | Metadata | |
Dart-02-18 | Comments |
Generators
값 sequence를 느리게 생성해야 하는 경우, generator function을 고려할 수 있다. Dart는 두 가지 동류의 generator 함수를 기본적으로 지원한다:
- Synchronous generator:
Iterable
객체를 return 한다. - Asynchronous generator:
Stream
객체를 return 한다.
동기 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가 재귀적이라면, yield*
를 사용하여 성능을 향상시킬 수 있다:
Iterable<int> naturalsDownFrom(int n) sync* {
if (n > 0) {
yield n;
yield* naturalsDownFrom(n - 1);
}
}
댓글남기기