@[TOC]
Dart相对Java特殊点摘录
=>简写
//以下三者完全等价
bool isNoble(int atomicNumber) {
return _nobleGases[atomicNumber] != null;
}
isNoble(atomicNumber) {
return _nobleGases[atomicNumber] != null;
}
bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;
级联符号(..)
级联(..)允许您对同一对象执行一系列操作。除了函数调用,您还可以访问同一对象上的字段。这通常会省去创建临时变量的步骤,并允许您编写更多的级联代码。
void main() {
querySelector('#sample_text_id') // 获取一个对象
..text = 'Click me!' //使用它的成员
..onClick.listen(reverseText);
}
条件表达式中的两个问号(??)
以下三者等价
String playerName(String name) => name ?? 'Guest';
// 稍微长一点的版本使用 ?: 操作符
String playerName(String name) => name != null ? name : 'Guest';
// 非常长的使用if - else语句的版本
String playerName(String name) {
if (name != null) {
return name;
} else {
return 'Guest';
}
}
赋值表达式(?.)
对象的成员赋值时,可以减少对象为null的判断
// If p is non-null, set its y value to 4.
p?.y = 4;
//等价
if (p != null) {
p.y=4
}
所有函数都有返回值,一切皆为对象
foo() {}
assert(foo() == null);
函数的参数不一定必须有,如下情况
String say(String from, String msg, [String device]) {
var result = '$from says $msg';
if (device != null) {
result = '$result with a $device';
}
return result;
}
assert(say('Bob', 'Howdy') == 'Bob says Howdy');
/// Sets the [bold] and [hidden] flags ...
void enableFlags({bool bold = false, bool hidden = false}) {...}
// bold will be true; hidden will be false.
enableFlags(bold: true);
参考
https://dart.dev/guides/language/language-tour
https://www.jianshu.com/p/64a6ed7581aa