变量
-
变量用var修饰;
-
常量用const修饰;也可以用final修饰
-
Object是根基类
-
dynamic要注意,编译时不会报错;运行时如果访问了不存在的属性,会崩溃(运行时错误)
-
空值用null表示;
-
?表示可以为空的值,相当于Swift中的可选类型。可空类型在用之前必须先判空。
-
不带?的为非空类型,用之前必须初始化。关键字late表示稍后初始化。
-
带?的可空类型,如果已经判空,在保证不空的情况下,可以用!强制解包。这个Swift中的!语义相同。
-
函数后面加个?表示可选链,与Swift中的意思一样。(存在就执行,不存在什么也不干)
函数
-
函数也是对象,类型是Function。可以赋值给变量,也可以当做参数传递。
-
如果不显示指明,函数返回值默认是dynamic
-
对于只包含一个表达式的函数,可以用 =>
-
包装一组函数参数,用[]标记为可选的位置参数,并放在参数列表的最后面。(中括号)
-
定义函数时,使用{param1, param2, …},放在参数列表的最后面,用于指定命名参数。(大括号)
-
不能同时使用可选的位置参数和可选的命名参数。(中括号大括号只能选一个,或者都不选)
mixin
-
Dart 是不支持多继承的,但是它支持 mixin,简单来讲 mixin 可以 “组合” 多个类
-
我们定义了几个 mixin,然后通过 with 关键字将它们组合成不同的类。
-
如果多个mixin 中有同名方法,with 时,会默认使用最后面的 mixin 的
异步支持
-
Dart类库有非常多的返回Future或者Stream对象的函数。 这些函数被称为异步函数
-
Future与JavaScript中的Promise非常相似,表示一个异步操作的最终完成(或失败)及其结果值的表示。
-
Future 的所有API的返回值仍然是一个Future对象,所以可以很方便的进行链式调用。
-
Future.then,Future.catchError,Future.whenComplete,Future.wait与Promise中的then,error,final,all等方法对应
-
Dart中的async/await 和JavaScript中的async/await功能是一样的:异步任务串行化。
-
async用来表示函数是异步的,定义的函数会返回一个Future对象,可以使用 then 方法添加回调函数。
-
await 后面是一个Future,表示等待该异步任务完成,异步完成后才会往下走;await必须出现在 async 函数内部。
-
无论是在 JavaScript 还是 Dart 中,async/await 都只是一个语法糖,编译器或解释器最终都会将其转化为一个 Promise(Future)的调用链。
Stream
-
Stream 也是用于接收异步事件数据,和 Future 不同的是,它可以接收多个异步操作的结果(成功或失败)。
-
Stream 常用于会多次读取数据的异步任务场景,如网络内容下载、文件读写等。
网友评论