三項演算子という言葉をご存知だろうか?
エンジニアによって好みは分かれるが、数行のプログラムが1行で書け、便利な書き方になっている。if文を書かずとも、条件分岐をさせられる書き方で、使い方も簡単だ。
このページではJavaの三項演算子について使い方をお伝えする。参考にしてほしい。
三項演算子の使い方
Javaの三項演算子は、3つのオペランド(数字とか変数とか)を持つ演算子だ。最初のオペランドは、条件となる式である。あとの二つは、条件から選ばれる二つの式である。条件と選ばれる式の関係は次のようになる。
- オペランド1がtrueならば、オペランド2が生み出した値を演算結果に代入する。
- オペランド1がfalseならば、オペランド3が生み出した値を演算結果に代入する。
この三項演算子を用いると、条件とそれに対応した式をコンパクトに書くことができる。ただし、条件に応じて選ばれるふたつの式の型に注意が必要である。この点はJava言語仕様に詳しく書かれている。
書き方の基本は簡単だ。
演算結果 = オペランド1 ? オペランド2 : オペランド3;
例えば、xとyを比べて、xの方が大きい時はxを、yの方が大きい時はyをzに代入したいというときは次のようになる。
z = x > y ? x: y;
まだ知らない方も多いだろうが、if文で書くと、行数は跳ね上がる。それが一行でかけるので効率がいいわけだ。
三項演算子のサンプルプログラム
このサンプルプログラムは、三項演算子のオペランド1のBoolean値に応じてオペランド2とオペランド3が選択されることを示している。
さらに、オペランド3が選択されたときオペランド2の型と異なっていてもよいことも確認できるようになっている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public class TernaryOperator { public static void main (String[] args) { byte byteValue2 = 2;//[1] short shortValue2 = 2;//[2] int integerValue2 = 2;//[3] long longValue2 = 2;//[4] int integerValue3 = 3;//[5] long result;//[6] result = integerValue3 > integerValue2 ? integerValue3 : integerValue2;//[7] System.out.println("[8] オペランド1 integer " + result); result = integerValue3 < integerValue2 ? integerValue3 : integerValue2;//[9] System.out.println("[10] オペランド2 integer " + result); result = integerValue3 < integerValue2 ? integerValue3 : longValue2;//[11] System.out.println("[12] オペランド2 long " + result); result = integerValue3 < integerValue2 ? integerValue3 : shortValue2;//[13] System.out.println("[14] オペランド2 short " + result); result = integerValue3 < integerValue2 ? integerValue3 : byteValue2;//[15] System.out.println("[16] オペランド2 byte " + result); } } |
実行結果
1 2 3 4 5 |
[8] オペランド2 integer 3 [10] オペランド3 integer 2 [12] オペランド3 long 2 [14] オペランド3 short 2 [16] オペランド3 byte 2 |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [7] integerValue3 > integerValue2 ? integerValue3 : integerValue2をresultに代入する。
- [8] resultを表示する。
- [9] integerValue3 < integerValue2 ? integerValue3 : integerValue2をresultに代入する。
- [10] resultを表示する。
- [11] integerValue3 < integerValue2 ? integerValue3 : longValue2をresultに代入する。
- [12] resultを表示する。
- [13] integerValue3 < integerValue2 ? integerValue3 : shortValue2をresultに代入する。
- [14] resultを表示する。
- [15] integerValue3 < integerValue2 ? integerValue3 : byteValue2をresultに代入する。
- [16] resultを表示する。
三項演算子は使わない方がいい?
「三項演算子はわかりにくいから使わないように」と教わることがある。理由は直感的でないからだ。
if文でも同じことができるので、そちらを使うという方針を取っている企業もある。
しかし、定義を考えると、三項演算子はあくまでも2つの数字から1つを効率良く選ぶ方法だ。分岐処理というより、2つの数字からどちらを選ぶというときには、効率がいい。
使い道を誤らず、使っていきたい演算子だ。
まとめ
このページではJavaの三項演算子についてお伝えした。使い方と読み方は必ず覚えておこう。