dart系列之:在dart中使用生成器

简介: dart系列之:在dart中使用生成器

目录



简介


ES6中在引入异步编程的同时,也引入了Generators,通过yield关键词来生成对应的数据。同样的dart也有yield关键词和生成器的概念。


什么时候生成器呢?所谓生成器就是一个能够持续产生某些数据的装置,也叫做generator。


两种返回类型的generator


根据是同步生成还是异步生成,dart返回的结果也是不同的。


如果是同步返回,那么返回的是一个Iterable对象.


如果是异步返回,那么返回的是一个Stream对象。


同步的generator使用sync*关键词如下:


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


异步的generator使用的是async* 关键词如下:


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


生成关键词使用的是yield。


如果yield后面跟着的本身就是一个generator,那么需要使用yield*。


Iterable<int> naturalsDownFrom(int n) sync* {
  if (n > 0) {
    yield n;
    yield* naturalsDownFrom(n - 1);
  }
}


Stream的操作


stream表示的是流,得到这个流之后,我们需要从流中取出对应的数据。


从Stream中取出数据有两种方式,第一种就是使用Stream本身的API来获取Stream中的数据。


最简单的就是调用stream的listen方法:


StreamSubscription<T> listen(void onData(T event)?,
      {Function? onError, void onDone()?, bool? cancelOnError});


listen可以接数据的处理方法,具体使用如下:


final startingDir = Directory(searchPath);
      startingDir.list().listen((entity) {
        if (entity is File) {
          searchFile(entity, searchTerms);
        }
      });


默认的方法是onData方法。


另外一种就是今天要讲解的await for.


await for的语法如下:


await for (varOrType identifier in expression) {
  // Executes each time the stream emits a value.
}


要注意的是上面的expression必须是一个Stream对象。并且await for必须用在async中,如下:


Future<void> main() async {
  // ...
  await for (final request in requestServer) {
    handleRequest(request);
  }
  // ...
}


如果要想中断对stream的监听,则可以使用break或者return。


总结



以上就是dart中生成器的使用了。

相关文章
|
5月前
|
Dart 编译器 API
Dart笔记:Dart 库
Dart笔记:Dart 库
152 0
N..
|
5月前
|
Dart
Dart语言
Dart语言
N..
38 0
|
JSON Dart 编译器
Dart简单介绍
Dart是一种面向对象、用于构建高性能应用程序的编程语言,它具有快速开发、易于维护和可移植性等特点,因此在 Flutter 应用程序开发方面越来越受欢迎。在这篇文章中,我们将深入探讨 Dart 语言的一些技术思考。 类型系统
Dart简单介绍
|
存储 Dart JavaScript
Flutter(三)——一篇文章掌握Dart语言的用法(一)
Flutter(三)——一篇文章掌握Dart语言的用法(一)
373 0
Flutter(三)——一篇文章掌握Dart语言的用法(一)
|
Dart JavaScript 前端开发
Numbers——Dart
Dart中的数字类型有两种,int和double。
Runes——Dart
Dart中,Runes是指UTF-32定义的Unicode字符串。 Unicode使用数字表示世界上所有的字母、数字和符号。因为Dart中的String是一系列UTF-16字节单元,而在String中想要表示32位的Unicode值,则需要特殊的语法。 一般我们使用 `\uXXXX` 这种形式表示一个Unicode码,`XXXX`表示4个十六进制值。例如,字符(♥)的Unicode字符是`\u2665`。 当十六进制数据多余或者少于4位时,将十六进制数放入到花括号中,例如,微笑表情(😆)是`\u{1f600}`。 String类中有几个属性你可以用来获取`rune`信息。
|
Dart
在 dart 中使用 equatable
在 dart 中使用 equatable
177 0
|
Dart 开发工具
使用 dart tear-off
使用 dart tear-off
124 0
|
Dart JavaScript 前端开发
Flutter(三)——一篇文章掌握Dart语言的用法(二)
Flutter(三)——一篇文章掌握Dart语言的用法(二)
293 0
|
Dart JavaScript 前端开发
dart系列之:dart语言中的函数
dart系列之:dart语言中的函数