1. 概要

三元条件演算子?:を使用すると、Javaで式を定義できます。これは、値を返すif-elseステートメントの要約形式です。

このチュートリアルでは、3値構造をいつどのように使用するかを学習します。 まず、その構文を確認してから、その使用法を調べます。

2. 構文

Javaの三項演算子?:は、3つのオペランドを受け入れる唯一の演算子です。

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. 発現評価

Javaの三元構造を使用する場合、右側の式の1つのみ、つまり expression1またはexpression2のいずれかが、実行時に評価されます。

簡単なJUnitテストケースを作成することで、これをテストできます。

@Test
public void whenConditionIsTrue_thenOnlyFirstExpressionIsEvaluated() {
    int exp1 = 0, exp2 = 0;
    int result = 12 > 10 ? ++exp1 : ++exp2;
    
    assertThat(exp1).isEqualTo(1);
    assertThat(exp2).isEqualTo(0);
    assertThat(result).isEqualTo(1);
}

boolean12>10は常にtrueと評価されるため、exp2の値はそのままです。

同様に、false状態で何が起こるかを考えてみましょう。

@Test
public void whenConditionIsFalse_thenOnlySecondExpressionIsEvaluated() {
    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. ネスト三項演算子

三項演算子を任意の数のレベルにネストすることができます。

したがって、この構成はJavaで有効です。

String msg = num > 10 ? "Number is greater than 10" : 
  num > 5 ? "Number is greater than 5" : "Number is less than equal to 5";

上記のコードの読みやすさを向上させるために、必要に応じて中括弧()を使用できます。

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構造を三項演算子で置き換えることはできません。 ただし、これは場合によっては優れたツールであり、コードをはるかに短く、読みやすくします。

いつものように、ソースコード全体はGitHub利用できます。