官网
重要的几个点
默认值
未初始化的变量默认值是 null,即使变量是数字 类型默认值也是 null,因为在 Dart 中一切都是对象,数字类型 也不例外。
final 和const的不同之处
官网并没有很详细,以下链接比较清楚明白
final 和const区别
=>在命名函数和匿名函数中的表现
在命名函数中:
isNoble(atomicNumber) {
return _nobleGases[atomicNumber] != null;
}
等价于
bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;
=> expr 语法是 { return expr; } 的简写。 => 符号 有时也被称为 箭头 语法。注意expr 是表达式而不是语句
在匿名函数中,(有时候也被称为 lambda 或者 closure)
这个=>并不是代表return的意思,仅仅是一种简写,当匿名函数只有一条语句, 可以使用箭头简写。
list.forEach((item) {
print('${list.indexOf(item)}: $item');
});
等价简写
list.forEach(
(item) => print('${list.indexOf(item)}: $item'));
assert
如果 assert 语句中的布尔条件为 false , 那么正常的程序执行流程会被中断。 在本章中包含部分 assert 的使用, 下面是一些示例
// 确认变量值不为空。
assert(text != null);
// 确认变量值小于100。
assert(number < 100);
// 确认 URL 是否是 https 类型。
assert(urlString.startsWith('https'));
assert 语句只在开发环境中有效, 在生产环境是无效的; Flutter 中的 assert 只在 debug 模式 中有效。 开发用的工具,例如 dartdevc 默认是开启 assert 功能。 其他的一些工具, 例如 dart 和 dart2js, 支持通过命令行开启 assert : --enable-asserts。
assert 的第二个参数可以为其添加一个字符串消息。
assert(urlString.startsWith('https'),
'URL ($urlString) should start with "https".');
其他容易忘记的:
- 类型检查
as, is, 和 is! 运算符用于在运行时处理类型检查.
使用 as 运算符将对象强制转换为特定类型
(emp as Person).firstName = 'Bob';
-
使用 = 为变量赋值。 使用 ??= 运算符时,只有当被赋值的变量为 null 时才会赋值给它。
-
条件表达式
condition ? expr1 : expr2
如果条件为 true, 执行 expr1 (并返回它的值): 否则, 执行并返回 expr2 的值。
expr1 ?? expr2
如果 expr1 是 non-null, 返回 expr1 的值; 否则, 执行并返回 expr2 的值。 -
?.的用法
A 是一个类 userId是它的一个属性
A?.userId 的含义就是,当A不为空的时候才执行A.userId的取值操作,否则不进行。相当于进行了一个null的校验。 -
当定义的时候用到了?
例如 String? x;
这里面的意思是定义了一个String 类型的x的变量,但是这个x可以为空值。