??
空运算符,左侧不为null,则返回左侧,否则返回右侧
void main() {
print(0 ?? 1); // <- 0
print(1 ?? null); // <- 1
print(null ?? null); // <- null
print(null ?? null ?? 2); // <- 2
}
??=
空感知赋值运算符,当左侧未null时,则进行赋值
void main() {
int value;
print(value); // <- null
value ??= 5;
print(value); // <- 5, changed from null
value ??= 6;
print(value); // <- 5, no change
}
?.
空感知访问运算符,此运算符通过尝试访问可能为null的对象属性或方法来防止您的应用程序崩溃
void main() {
String value; // <- value is null
print(value.toLowerCase()); // <- will crash
print(value?.toLowerCase().toUpperCase()); // <- will crash
print(value?.toLowerCase()?.toUpperCase()); // <- output is null
}
…?
空感知扩展运算符,此运算符可防止您使用扩展运算符添加空元素(允许您将多个元素添加到集合中)
void main() {
List<int> list = [1, 2, 3];
List<String> list2; // <- list2 is null
print(['chocolate', ...?list2]); // <- [chocolate]
print([0, ...?list2, ...list]); // <- [0, 1, 2, 3]
print(['cake!', ...list2]); // <- will crash
}
?
三元运算符
void main() {
print(2 == 2 ? "a truth" : "a lie"); // <- a truth
print(1 == 2 ? "a truth" : "a lie"); // <- a lie
5 == 6 ? doThis() : doThat(); // <- done that
}
void doThis() {
print('done this');
}
void doThat() {
print('done that');
}