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

Dart - 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);
  }
}

태그:

카테고리:

업데이트:

댓글남기기