3.9 条件演算子
3.9.1 式の分岐
if 文を使えばプログラムを分岐させることができるため、分岐制御に関しては if 文さえあれば十分ではありますが、条件によって値が変化する結果を得たい場合はやや冗長であるとも考えられています。変数 A に代入する値を条件によって B か C に分岐させる処理を考えてみましょう。
int A; if (exp) A = B; else A = C;
確かに、if 文を使って分岐させることによって問題を解決することは可能です。しかし、分岐によって変数の値を決定しているため、if 文を抜け出した後の文では、変数 A は確実な代入状態ではありません。A を確実な代入状態にするためには、無意味な値で初期化するなどの対策が必要です。
このように、条件によって値を変化させたい場合、文単位ではなく式単位で分岐させられると便利です。そこで、条件演算子 ?: を用いることによって、式単位の分岐を実現することができます。条件演算子はこれまでの演算子とは異なり、唯一、3 つのオペランドを受け取る 3 項演算子です。
条件式 ? 式1 : 式2
条件式には boolean 型の式を指定します。条件式が true であれば式 1 が返され、false であれば式 2 が返されます。式 1 と式 2 の型は互換性がなければなりません。代入変換や数値の格上げで変換できない型の場合はエラーとなります。この条件演算子を使えば、変数に代入する値を簡単に分岐できます。
int A = exp ? B : C;
条件演算子を使えば、このように 1 の式の中で値を変化させることができます。
class Test { public static void main(String args[]) { for(int i = 1 ; i < 5 ; i++) { String str = i + " = "; str += i % 2 == 0 ? "偶数" : "奇数"; System.out.println(str); } } }
>java Test 1 = 奇数 2 = 偶数 3 = 奇数 4 = 偶数
コード1では、for 文でカウンタ変数 i を宣言し、これが 5 になるまで繰り返します。プログラムは繰り返すごとに変数 i の値と、それが偶数なのか、奇数なのかを表示します。条件演算子を用い、変数 i から 2 で割ったあまりを調べ、その結果が 0 であれば偶数、そうでなければ奇数という文字を文字列に追加して表示していることがわかります。条件演算子を使えば、このような計算上の分岐をスマートに実現することができます。