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で入手]をご覧ください。