この章のテーマ §
条件演算子(?:演算子)を学習します。条件演算子は利用を禁止されることもあるけれど、使用された既存ソースコードも多いので智識を持たねばソースを読めません。
前提知識 §
Console.WriteLineメソッド, 文字列の基礎, 変数の基礎, 条件演算子, int型, for文, if文, 演算子の優先順位
解説 §
条件演算子は、式の中にif文相当の条件判断を書き込むことができます。
ただし、if文では実行す文を選択できましたが、条件演算子は値を選択します。
書き方は以下の通りです。
- (条件式) ? (成立した時の値) : (成立しなかった時の値)
たとえば、true?"A":"B"は"A"という値になりますが、false?"A":"B"は"B"になります。
罠の数々 §
- 条件演算子は三項条件演算子、三項演算子とも呼ばれる。おおむね同じものを示していると思って良い
- 良く分からなかったらif文で書いても良い
- 演算子の優先順位の影響を受けやすいことに注意。たとえば X ? Y : Z + 1と書いた時、+ 1はZに対するものか、X ? Y : Z全体に対するものか、間違うケースがある。カッコを付けて先に計算して欲しい範囲を明示すると安心だ
- この機能は、「分かりにくい」「読みにくい」「知らない人もいる」などの理由で禁止されることも多い
- 一方で、短く書けて便利だし、深刻なトラブルを起こすわけでもないので、利用している人も多い。知らないでは読めないソースも多い。学ぶことは必須
参考リンク §
?: 演算子 (C# リファレンス)
サンプルソース: conditionalOperator §
Console.WriteLine("条件演算子で書く");
for (int i = 0; i < 4; i++)
{
var label = i % 2 == 0 ? "偶数" : "奇数";
Console.WriteLine($"{i}は{label}です。");
}
Console.WriteLine("if文で書く");
for (int i = 0; i < 4; i++)
{
string label;
if (i % 2 == 0)
label = "偶数";
else
label = "奇数";
Console.WriteLine($"{i}は{label}です。");
}
実行結果 §
条件演算子で書く
0は偶数です。
1は奇数です。
2は偶数です。
3は奇数です。
if文で書く
0は偶数です。
1は奇数です。
2は偶数です。
3は奇数です。
リポジトリ §
https://github.com/autumn009/CSharpPrimer2
練習問題 §
以下のプログラムの実行結果を予測してみよう。
var x = false;
var y = true;
var a = x ? "A": y ? "B" : "C";
Console.WriteLine(a);
- A
- B
- C
- ABC
- コンパイルエラー
[[解答]]