Dart学习
变量
var 用于申明变量
可为空 ?
不可变 final const
final 的值只能被设定一次,而const则是一个编译时的常量
数据类型
Number String Boolean List Map
运算符
常规运算符
条件运算符:?: ??
也就是js的三元运算符和空值合并符
测试运算符
is
特有的运算符:
?. 当被调用者不为空的情况下执行
is is! 检查对象是否属于或不属于某种类型
as 将对象类型转换
?? 空值检测,如果为空返回后面的值
.. 链式操作
??= 空值判断,左边值为null的情况下进行赋值
dart和js太像了,从语法和概念上来看都很像.
抽象类
用于定义一些基本的结构,具体实现由抽象类的子类来完成
模块化
导入包
import 'dart.math'
定义库
library
导出
export
异步编程
使用Future,async/await
Future 表示一个异步操作的结果,有三种状态:完成、错误、未完成
和js类似,只能在async中使用await
await表示等待执行结果
协程是一种轻量级的现场,可以在程序内部进行切换,不需要依赖操作系统的线程管理。
宏任务
定时器事件
Timer,在指定的时间后执行回调函数
Timer(Duration(seconds:2),()=>{
print('Timer Event')
})
IO事件
文件读写,网络请求
UI事件
Flutter 用户交互
宏任务与微任务相对,宏任务的执行顺序在微任务之后
常见的微任务:Future.then()回调、async/await回调、scheduleMicrotask()函数
isolate
在dart中,所有的代码都运行在一个单线程中,这个线程是主isolate,如果需要执行耗时的计算,可以创建一个新的isolate
isolate之间不能共享内存,因此只能通过消息来进行通信。
消息传递
Sendport ReceivePort 是进程间通讯的工具,sendport发送消息,在receiveport中接收消息。
var rec = ReceivePort();
var send = rec.sendPort;
for (var element in [1, 2, 3, 4, 5, 6]) {
send.send(element);
}
rec.listen((message) {
print(message);
});
isolate的应用场景:数据处理,网络请求,web服务
泛型
泛型在编程中的概念是允许在代码中使用占位符,然后在实例化方法、类的时候指定占位符所代表的实际类型