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)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *