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天前
|
人工智能 运维 安全
|
3天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
10天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
848 109
|
4天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
482 12
|
4天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。