Dart Generators2024 年 8 月 29 日 | 4 分钟阅读 Dart 生成器是一个独特的功能,它允许我们生成一系列值。生成器按需返回值;这意味着当尝试迭代迭代器时,将生成值。 Dart 提供了对两种类型的生成器函数的内置支持。
同步生成器它返回一个可迭代对象,该对象同步地携带值。 yield 关键字与将同步生成器函数体标记为 sync* 一起使用,以生成值。 让我们理解以下同步生成器的示例。 示例 -输出 Dart Synchronous Generator Example. 9 7 5 3 1 说明在上面的程序中,我们声明了一个带有 foreach 循环的 oddNumber(10) 函数,该函数没有函数体。 foreach 循环将迭代该函数。现在,我们将 oddNumber(10) 函数创建为同步生成器函数。 在函数体中,我们初始化了一个新变量 k,它分配了参数 n。然后,我们应用 while 循环来迭代该函数,并且循环体被迭代,直到 k 的值小于或等于 0。 我们对 k 进行了模运算,以从生成器中找到奇数。我们使用了 yield 语句,该语句暂停了函数的执行并一次返回一个值。它将返回生成器函数每次执行的值。当 while 循环的条件变为 false 时,循环终止并打印奇数。 异步生成器它返回一个流对象,该对象异步地携带值。 yield 关键字与将异步生成器函数体标记为 async* 一起使用,以生成值。 让我们理解以下示例 - 示例 -输出 Dart Asynchronous Generator Example. 0 1 2 3 4 5 6 7 8 9 说明上面的代码异步生成了值。 asyncNaturalsTo(int num) 函数在函数体的每次执行中都返回流对象。这里, yield 关键字的行为与之前的例子相同;它停止了函数的执行,返回了该值,并恢复了下一次迭代的执行。它将反复发生,直到函数体终止。 让我们理解与生成器函数相关的以下概念。 yield 关键字yield 一次将单个值返回给序列,但不会完全停止生成器函数的执行。它为生成器函数的每次执行返回一个值。 sync* 关键字 -sync* 关键字用于声明同步生成器函数。当我们尝试迭代值时,它会返回值,而不是在创建时返回值。让我们看一下以下示例 - 示例 -输出 creating iterator Iteration starts... generator started 0 1 2 3 generator function ended end of main function 解释 -上面的生成器函数在我们迭代迭代器时生成了值。 async* 关键字async 关键字用于声明异步生成器。它返回流对象。让我们理解以下示例 - 示例 -输出 creating iterator starting to listen... end of the main function waiting inside generator a 3 seconds :) started generating values... 0 1 2 3 ended generating values... 注意 - 复制上面的代码并将其粘贴到您的 Dart 编辑器中。您可以清楚地看到同步生成器和异步生成器之间的区别。下一篇Dart 可调用类 |
我们请求您订阅我们的新闻通讯以获取最新更新。