Dart/기초
[Dart] Generator 제너레이터
붕어사랑 티스토리
2021. 10. 15. 17:33
반응형
Generator란?
연속적인 값들의 모음을 만들어주는 함수이다.
sync한 데이터와 async한 데이터를 만들어줄때 방법이 다르다
- Synchronous generator: Iterable 객체를 리턴해야 한다
- Asynchronous generator: Stream 객체를 리턴해야 한다
아래는 sync한 버전의 예시이다. 0부터 n까지의 연속적인 숫자의 데이터들을 만들어 return해 준다
sync 제너레이터를 만드려면 function body 앞에 sync* 를 붙여주고 yield 키워드를 이용해 데이터를 생성해나간다
Iterable<int> naturalsTo(int n) sync* {
int k = 0;
while (k < n) yield k++;
}
async 제너레이터는 async* 를 함수 구현체 앞에 붙여주고 Stream 객체를 리턴해준다.
Stream<int> asynchronousNaturalsTo(int n) async* {
int k = 0;
while (k < n) yield k++;
}
만약 recursive한 제너레이터라면 yield* 를 이용하여 퍼포먼스를 향상시킬 수 있다
Iterable<int> naturalsDownFrom(int n) sync* {
if (n > 0) {
yield n;
yield* naturalsDownFrom(n - 1);
}
}
반응형