生成器

2020-02-03 23:43 更新

當您需要延遲生成( lazily produce )一系列值時, 可以考慮使用_生成器函數_。 Dart 內置支持兩種生成器函數:

  • Synchronous 生成器: 返回一個 Iterable 對象。
  • Asynchronous 生成器: 返回一個 Stream 對象。

通過在函數體標記 sync*, 可以實現一個同步生成器函數。 使用 yield 語句來傳遞值:

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

有關生成器的更多信息,請參考文章 Dart Language Asynchrony Support: Phase 2 .

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號