CodeGym /コース /C# SELF /C#の三項演算子:シンプルな条件分岐と注意点

C#の三項演算子:シンプルな条件分岐と注意点

C# SELF
レベル 3 , レッスン 5
使用可能

1. 式 vs 文

C#では、すべての文は2つのカテゴリに分かれるんだ:Statement)とExpression)。文は「実行される」って言うし、式は「評価される」って言う。でも、それが一番大事な違いじゃない。

一番大事なのは:式には評価結果があるってこと。その結果にはがあって、変数に代入したり、他の式で使ったりできるんだ。

例:

コード メモ
int x;
(a < 10)
式、型はbool
i++;
式、型は変数iと同じ
x = 5;
式、型は変数xと同じ

これって何が嬉しいの?

多くの文は実は式(評価結果がある)なんだ。たとえば、こんなコードもOK:
int x, y, z;
x = y = z = 1; 	// x = (y = (z = 1));
式の結果がいらないなら、無視してもOK:
Console.ReadLine();	// 入力結果は無視

式が結果以外にも何かしてくれる(たとえば画面に出力したり、入力を読んだり)場合は便利だよね。

2. 三項演算子

C#には特別な三項(トリプル)演算子があるよ。これはif–elseの省略形みたいなもの:


条件 ? 式1 : 式2;
三項演算子の構文

条件がtrueなら式1が評価されて、そうじゃなければ式2が評価される。条件の後に?、2つの式は:で区切るよ。

if-elseとの一番の違いは:三項演算子は「式」ってこと。結果を変数に代入したり、他の式で使ったりできるんだ。

たとえば、2つの数字の最小値を計算してみよう:

int a = 2;
int b = 3;
int min = a < b ?  a :  b;

または、条件によって変数に違う値を代入したいとき:


int age = 25;
int money;
if (age > 30)
   money = 100;
else
   money = 50;
クラシックな if-else

三項演算子だとこうなる:


int age = 25;
int money = age > 30 ? 100 : 50;
三項演算子 — コンパクトな書き方

どっちを使うべき?if-elseと三項演算子、速度は変わらないけど、三項演算子は短い条件に向いてるよ。1行で収まらないなら、読みやすさのためにif-elseを使ったほうがいい。

3. 細かい動作の話

値の型
三項演算子の両方の分岐(<真のときの値><偽のときの値>)は同じ型か、互換性がある型じゃないとダメ(たとえば両方stringとかintとか)。

OKな例:

int a = 10, b = 20;
int max = (a > b) ? a : b; // 両方int

コンパイルエラー:

int a = 10, b = 20;
// stringとintは互換性なし
string result = (a > b) ? "大きい" : 0; // コンパイルエラー

正しい例:

int a = 10, b = 20;
string result = (a > b) ? "大きい" : "小さいか同じ";

例:数字の処理

int number = -5;
int abs = (number >= 0) ? number : -number;
Console.WriteLine(abs); // 5

4. 三項演算子をアプリに組み込む

ちょっとした対話アプリを書いてみよう:挨拶だけじゃなくて、来年何歳になるか、そして成人かどうかも教えてくれるやつ。

Console.Write("あなたの名前を入力してください: ");
string name = Console.ReadLine();

Console.Write("あなたの年齢を入力してください: ");
string ageText = Console.ReadLine();
int age = int.Parse(ageText);

int nextYear = age + 1;
string status = (nextYear >= 18) ? "成人" : "未成年";

Console.WriteLine($"こんにちは、{name}!来年は{nextYear}歳になります。あなたは{status}です。");

細かい説明:

  • 変数statusは三項演算子で計算してる:来年の年齢が18以上なら成人(もしくはそのまま成人)、そうじゃなければ未成年。
  • 三項演算子は文字列の中(たとえば$""の補間)にも簡単に組み込めるよ。

5. ネストした三項演算子 — 注意!

三項演算子は入れ子(ネスト)にできる(それぞれの分岐にさらに三項演算子を入れる)。でも…だいたい頭がこんがらがるから、後で読む人(2日後の自分も含む)のためにも注意しよう。

例:年齢でカテゴリ分け

string category = (age < 7) ? "幼児" :
                  (age < 18) ? "学生" :
                  (age < 65) ? "大人" : "高齢者";

判断表:

年齢 条件 結果
< 7 age < 7 幼児
7–17 age < 18 学生
18–64 age < 65 大人
65以上 それ以外 高齢者

このくらいならまだ読めるけど、もっと複雑ならif-else if-elseを使ったほうがいいよ。

6. ライフハック:三項演算子とbool

たまにこんなコード見るけど:

bool adult = (age >= 18) ? true : false;

でもこれは冗長。(age >= 18)自体がboolを返すから、こう書けばOK:

bool adult = (age >= 18);
2
タスク
C# SELF, レベル 3, レッスン 5
ロック未解除
三項演算子の簡単な使い方
三項演算子の簡単な使い方
2
タスク
C# SELF, レベル 3, レッスン 5
ロック未解除
年齢カテゴリ
年齢カテゴリ
1
アンケート/クイズ
条件演算子、レベル 3、レッスン 5
使用不可
条件演算子
条件演算子
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION