Dart生成器、可调用类、隔离区
生成器
当你需要延迟地生成一连串的值时,可以考虑使用 生成器函数。Dart 内置支持两种形式的生成器方法:
通过在函数上加 sync*
关键字并将返回值类型设置为 Iterable 来实现一个 同步 生成器函数,在函数中使用 yield
语句来传递值:
1 | Iterable<int> naturalsTo(int n) sync* { |
实现 异步 生成器函数与同步类似,只不过关键字为 async*
并且返回值为 Stream:
1 | Stream<int> asynchronousNaturalsTo(int n) async* { |
如果生成器是递归调用的,可以使用 yield*
语句提升执行性能:
1 | Iterable<int> naturalsDownFrom(int n) sync* { |
可调用类
通过实现类的 call()
方法,允许使用类似函数调用的方式来使用该类的实例。
所有的类都可以定义并模拟 call()
方法,这个方法与普通 函数 是一样的,支持传参和定义返回类型等。
在下面的示例中,WannabeFunction
类定义了一个 call()
函数,函数接受三个字符串参数,函数体将三个字符串拼接,字符串间用空格分割,并在结尾附加了一个感叹号。单击运行按钮执行代码。
1 | class WannabeFunction { |
隔离区
大多数计算机中,甚至在移动平台上,都在使用多核 CPU。为了有效利用多核性能,开发者一般使用共享内存的方式让线程并发地运行。然而,多线程共享数据通常会导致很多潜在的问题,并导致代码运行出错。
为了解决多线程带来的并发问题,Dart 使用 isolate 替代线程,所有的 Dart 代码均运行在一个 isolate 中。每一个 isolate 有它自己的堆内存以确保其状态不被其它 isolate 访问。
所有的 Dart 代码都是在一个 isolate 中运行,而非线程。每个 isolate 都有一个单独的执行线程,并且不与其他的 isolate 共享任何可变对象。
你可以查阅下面的文档获取更多相关信息:
- Dart 中的并发特性
- dart:isolate API 参考 介绍了 Isolate.spawn() 和 TransferableTypedData 的用法
- Flutter 文档上关于 后台解析 的实用教程
- Isolate sample app
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 milovetingting!