Javaの三項演算子
1. 概要
三項条件演算子?:を使用すると、Javaで式を定義できます。 It’s a condensed form of the if-else statement that also returns a value.
このチュートリアルでは、三項構造をいつどのように使用するかを学習します。 まず、その構文を確認してから、その使用法を調べます。
2. 構文
Javaの三項演算子?:はthe only operator which accepts three operandsです。
booleanExpression ? expression1 : expression2
最初のオペランドはboolean式である必要があり、2番目と3番目のオペランドは何らかの値を返す任意の式にすることができます。 三元構造は、最初のオペランドがtrueと評価された場合は出力として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. 式の評価
When using a Java ternary construct, only one of the right-hand side expressions i.e. either expression1 or expression2 is evaluated at runtime。
単純な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式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. 入れ子の三項演算子
三項演算子を任意の数のレベルにネストすることができます。 したがって、構成体:
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の三項演算子について学びました。 すべてのif-else構成を3項演算子に置き換えることはできません。 ただし、これは場合によっては優れたツールであり、コードがはるかに短くて読みやすくなります。
いつものように、ソースコード全体がover on Githubで利用可能です。