ここで紹介する条件演算子とは、if-elseといった条件分岐文のことではありません。三項演算子とNull合体演算子の2種類を指します。
2種類の条件演算子
Dartには長ったらしい if-else 分岐を簡略化できる、2つのコンパクトな条件演算子が用意されています。1行で条件判定と値の代入・返却をまとめて記述可能です。
- 三項条件演算子:
condition ? expr1 : expr2 - 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許容式 ?? デフォルト値
expr1が null以外 の場合、そのままexpr1を返却;expr1がnullの場合は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)
Previous: Dart ビット演算子とシフト演算子
Next: Dart カスケード記法