Javaの三項演算子

1。概要

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

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

2.構文

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

booleanExpression ? expression1 : expression2

最初のオペランドはブール式である必要があり、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); }

私たちのブール表現12> 10はいつもと評価され、真の値のでEXP2がそのまま残りました。同様に、誤った状態で何が起こるかを考えてみましょう。

@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.入れ子の三項演算子

三項演算子を任意の数のレベルにネストすることができます。したがって、構成は次のとおりです。

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

いつものように、ソースコード全体はGithubで入手できます。