반응형
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);
}
}
반응형
'Dart > 기초' 카테고리의 다른 글
[Dart] Future, Stream, Async function (0) | 2021.10.15 |
---|---|
[Dart] 익명함수(Anonymous function), 람다함수(lamda) (0) | 2021.10.15 |
[Dart] deferred as 로 라이브러리 나중에 로딩하기 (0) | 2021.10.15 |
[Dart] var과 dynamic (0) | 2021.10.15 |
[Dart] mixin 클래스 (0) | 2021.10.15 |
댓글