Dart 条件式

ここで紹介する条件演算子とは、if-elseといった条件分岐文のことではありません。三項演算子とNull合体演算子の2種類を指します。

2種類の条件演算子

Dartには長ったらしい if-else 分岐を簡略化できる、2つのコンパクトな条件演算子が用意されています。1行で条件判定と値の代入・返却をまとめて記述可能です。

  1. 三項条件演算子:condition ? expr1 : expr2
  2. Null合体演算子:expr1 ?? expr2

三項演算子 condition ? expr1 : expr2

構文

真偽判定式 ? 条件成立時に実行する式 : 条件不成立時に実行する式

condition の評価結果が true なら expr1 を返し、false の場合は expr2 を返します。

このconditionは真偽値を返す式で、取得した真偽値に基づいて2つの値から一方を選んで代入・返却する仕組みです。

実例:

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)

Null合体演算子

変数がnullかどうかを判別し、デフォルト値を簡単に設定できます。

構文 expr1 ?? expr2

Null許容式 ?? デフォルト値
  • expr1null以外 の場合、そのまま expr1 を返却;
  • expr1null の場合は expr2 を返却

公式サンプル

void main() {
	// 引数はNull許容文字列 String?
	String playerName(String? name) => name ?? 'Guest';

	print(playerName("Tom"));  // Tom
	print(playerName(null));   // Guest
}Code language: JavaScript (javascript)

プレイヤー名を取得するplayerName関数を定義します。引数はnullを受け取れる文字列型で、??演算子を使って初期値を設定。渡された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)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です