Dart 条件表达式

这里说的条件运算符,不是条件语句 if-else,这些。而是三元运算符和空值合并运算符.

两种条件运算符

Dart 提供两种精简条件运算符,用来替代冗长的 if-else 分支,一行完成条件判断赋值 / 返回。

  1. 三元条件运算符:condition ? expr1 : expr2
  2. 空值合并运算符: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
  • expr1null,返回 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)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注