这里说的条件运算符,不是条件语句 if-else,这些。而是三元运算符和空值合并运算符.
两种条件运算符
Dart 提供两种精简条件运算符,用来替代冗长的 if-else 分支,一行完成条件判断赋值 / 返回。
- 三元条件运算符:
condition ? expr1 : expr2 - 空值合并运算符:
expr1 ?? expr2
三元运算符 condition ? expr1 : expr2
语法
布尔条件 ? 条件成立执行表达式 : 条件不成立执行表达式
当condition 结果为 true 则返回 expr1;为 false 则 返回 expr2
这个condition是布尔结果,根据布尔值做二选一赋值、返回
例子:
void main() {
bool isRain = true;
// 三元表达式赋值
var result = isRain ? '下雨' : '没有下雨';
print(result); // 下雨
isRain = false;
result = isRain ? '下雨' : '没有下雨';
print(result); // 没有下雨
}Code language: Dart (dart)
执行结果
D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
下雨
没有下雨Code language: CSS (css)
如果学过if – else后,你可以这样写
void main() {
bool isRain = true;
String result;
if (isRain) {
result = '下雨';
} else {
result = '没有下雨';
}
print(result);//下雨
}Code language: Dart (dart)
空值合并运算符
判断变量是否为空,快速设置默认值
语法 expr1 ?? expr2
可空表达式 ?? 默认值
expr1不为 null,直接返回expr1;expr1为null,返回expr2
官方例子
void main() {
// 入参为可空字符串 String?
String playerName(String? name) => name ?? 'Guest';
print(playerName("Tom")); // Tom
print(playerName(null)); // Guest
}Code language: JavaScript (javascript)
定义一个玩家名称:playerName,是可空字符串,然后使用?? 来给一个初始值,如果传入的name是null,则默认是Guest
补充
这里的playerName 是箭头函数。是函数的简写。后面我们回学到,它等价于下面
String playerName(String? name) {
return name ?? 'Guest';
}Code language: Dart (dart)
等价写法对比
用三元运算符实现
String playerName(String? name) => name != null ? name : 'Guest';Code language: JavaScript (javascript)
完整 if-else
String playerName(String? name) {
if (name != null) {
return name;
} else {
return 'Guest';
}
}Code language: JavaScript (javascript)
Previous: Dart 位运算符与移位运算符
Next: Dart 级联运算符