Javaにおける三項演算子
1.概要
三項条件演算子
?:
を使用すると、Javaで式を定義できます。
これは
if-else
ステートメントの要約形式で、値も返します。
このチュートリアルでは、三項構成子をいつどのように使用するかを学びます。
まず構文を見てから、その使い方を調べます。
2.構文
Javaの三項演算子
?:
は、3つのオペランドを受け入れる唯一の演算子です。
booleanExpression ? expression1 : expression2
一番最初のオペランドは
boolean
式でなければならず、2番目と3番目のオペランドは何らかの値を返す任意の式にすることができます。最初のオペランドが
true
と評価された場合は3進構文で
expression1
が、そうでない場合は
expression2
が返されます。
3.三項演算子の例
以下の
if-else
構文を考えてみましょう。
int num = 8;
String msg = "";
if(num > 10) {
msg = "Number is greater than 10";
}
else {
msg = "Number is less than or equal to 10";
}
上記のコードでは、
num
の条件付き評価に基づいて
msg
に値を割り当てました。
if-else
文を3項構造に簡単に置き換えることで、このコードを読みやすく安全にすることができます。
final String msg = num > 10
? "Number is greater than 10"
: "Number is less than or equal to 10";
4.式の評価
-
Javaの3項構造を使用する場合、実行時に評価されるのは
expression1
または
expression2
のいずれかの右側式のうちの1つのみです。
簡単な
JUnit
テストケースを書くことでそれをテストできます。
@Test
public void whenConditionIsTrue__thenOnlyExpression1IsEvaluated() {
int exp1 = 0, exp2 = 0;
int result = 12 > 10 ? ++exp1 : ++exp2;
assertThat(exp1).isEqualTo(1);
assertThat(exp2).isEqualTo(0);
assertThat(result).isEqualTo(1);
}
boolean
expression
12> 10
は常に
trueに評価されるため、
exp2
の値はそのまま残ります。同様に、
false__条件がどうなるかを考えてみましょう。
@Test
public void whenConditionIsFalse__thenOnlyExpression2IsEvaluated() {
int exp1 = 0, exp2 = 0;
int result = 8 > 10 ? ++exp1 : ++exp2;
assertThat(exp1).isEqualTo(0);
assertThat(exp2).isEqualTo(1);
assertThat(result).isEqualTo(1);
}
exp1
の値は変更されず、
exp2
の値が1増えました。
5.ネスティング三項演算子
3項演算子を任意の数のレベルにネストすることができます。だから、コンストラクト:
String msg = num > 10 ? "Number is greater than 10" :
num > 5 ? "Number is greater than 5" : "Number is less than equal to 5";
Javaで有効です。上記のコードの読みやすさを向上させるために、必要に応じて括弧
()、
を使用できます。
String msg = num > 10 ? "Number is greater than 10"
: (num > 5 ? "Number is greater than 5" : "Number is less than equal to 5");
しかし、
、
、現実の世界でこのように深くネストされた3項構成要素を使用することはお勧めできません。これはコードの可読性が低下し、保守が困難になるためです。
6.まとめ
このクイックチュートリアルでは、Javaの3項演算子について学びました。
すべての
if-else
構文を3項演算子に置き換えることはできません。ただし、場合によっては優れたツールであり、コードがはるかに短くて読みやすくなります。
いつものように、ソースコード全体はhttps://github.com/eugenp/tutorials/tree/master/core-java-lang-syntax[Githubで入手]をご覧ください。