Dart学习笔记:Iterable与Stream

避免烂尾,先开坑。

初略看了下Stream API,应该是一个很深的坑。Stream实现了类似于Rx的许多API,估计过年在家要好好读读文档了。


本打算只写关于Stream的东西,后面翻了一下文档,发现StreamIterable的API大致相同,唯一的区别在于Iterable是同步的,而Stream是异步的,它们的定义形式,类似于JavaScript下的生成器,而实际上,在Dart中,也将二者统称为生成器。

  • 定义Iterable
Iterable<int> naturalsTo(int n) sync* {
  int k = 0;
  while (k < n) yield k++;
}
  • 定义Stream
Stream<int> asynchronousNaturalsTo(int n) async* {
  int k = 0;
  while (k < n) yield k++;
}
  • 递归生成器
Iterable<int> naturalsDownFrom(int n) sync* {
  if (n > 0) {
    yield n;
    yield* naturalsDownFrom(n - 1);
  }
}