導入
「条件によって値を出し分けたいだけ」なのに if-else で4行書くと冗長です。条件演算子(三項演算子)? : を使うと、条件による値の選択を1行で書けます。
説明
flowchart LR
C["score >= 60 ?"] -->|true| A[""合格""]
C -->|false| B[""不合格""]
style C fill:#fff3e0
条件 ? 真のときの値 : 偽のときの値 という形。式なので、そのまま変数に代入したり、メソッドの引数に渡したりできます。
サンプル
int score = 72;
// if-else を1行で
string result = score >= 60 ? "合格" : "不合格";
Console.WriteLine(result); // 合格
// 値の計算にもそのまま使える
int abs = score >= 0 ? score : -score;
Console.WriteLine(abs); // 72
// 分岐が3つ以上なら switch 式のほうが読みやすい
string grade = score switch { >= 80 => "A", >= 60 => "B", _ => "C" };
Console.WriteLine(grade); // B
条件 ? A : Bは「条件が真なら A、偽なら B」を返す式- 代入・引数・return にそのまま書ける
- ネストしすぎると読みにくい。3分岐以上は
switch式を検討する
やってみよう
score の値を変えて出力の変化を見たり、条件演算子をネスト(a ? b : (c ? d : e))してから、同じ内容を switch 式に書き換えて読みやすさを比べてみましょう。
演習
int n = 7;
// TODO: 条件演算子で、n が偶数なら "even"、奇数なら "odd" を出力してください
string parity = ___;
Console.WriteLine(parity); // odd
- 期待される出力:
odd
ヒント1を見る
偶数判定は n % 2 == 0
ヒント2を見る
n % 2 == 0 ? "even" : "odd" と書きます
まとめ
- 条件演算子
? :は条件による値の選択を1行で書く式 - 代入・引数・return にそのまま使える
- 分岐が増えたら
switch式のほうが読みやすい