Dart基礎之生成器

當須要延遲生成值序列時,請考慮使用生成器函數。 Dart具備對兩種生成器功能的內置支持:異步

  • 同步生成器: 返回一個 Iterable 對象
  • 異步生成器: 返回一個 Stream 對象

要實現同步生成器函數,請將函數主體標記爲sync*,並使用yield語句傳遞值:async

Iterable<int> naturalsTo(int n) sync* {
  int k = 0;
  while (k < n) yield k++;
}
複製代碼

要實現異步生成器函數,請將函數主體標記爲async*,並使用yield語句傳遞值:函數

Stream<int> asynchronousNaturalsTo(int n) async* {
  int k = 0;
  while (k < n) yield k++;
}
複製代碼

若是生成器是遞歸的,則能夠使用yield*來提升其性能:性能

Iterable<int> naturalsDownFrom(int n) sync* {
  if (n > 0) {
    yield n;
    yield* naturalsDownFrom(n - 1);
  }
}
複製代碼
相關文章
相關標籤/搜索