0Pricing
Java Academy · レッスン

三項演算子のネスト

条件分岐を慎重につなげます。

「三項演算子のネスト」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。

ネストした三項演算子とは

ネストした三項演算子とは、分岐の1つの中に別の三項演算子を置くことです。

これにより、2つだけでなく3つ以上の結果から選べます。

結果は条件の連鎖となり、左から右へ評価されます。

int score = 75;
String grade = score >= 90 ? "A" : score >= 80 ? "B" : "C";

グループ化の仕組み

三項演算子は右結合です。つまり、false の分岐が連鎖の残りを取り込みます。

そのため、a ? x : b ? y : z は a ? x : (b ? y : z) と解釈されます。

各 : によって、次の条件へ処理が引き渡されます。

// reads as: a ? x : (b ? y : z)
String r = false ? "x" : true ? "y" : "z"; // r = "y"

3方向の選択

ここでは、数値を負、ゼロ、正のいずれかに分類します。

最初の条件で負かどうかを確認し、false の分岐でゼロと正のどちらかを確認します。

public class Main {
    public static void main(String[] args) {
        int n = 0;
        String sign = n < 0 ? "negative" : n == 0 ? "zero" : "positive";
        System.out.println(sign);
    }
}

成績判定の例

よくある使い方は、スコアを英字の成績に対応付けることです。

条件を順番に確認し、true になった時点で対応する英字が返されます。

public class Main {
    public static void main(String[] args) {
        int score = 83;
        String grade = score >= 90 ? "A"
            : score >= 80 ? "B"
            : score >= 70 ? "C" : "F";
        System.out.println(grade);
    }
}

順序が重要

条件は上から下へテストされるため、最も具体的な条件または最も高い範囲を先に置きます。

score >= 90 より前に score >= 70 を確認すると、スコアが95の場合、最初の一致で誤って処理が止まります。

// wrong order: 95 would match >= 70 first
int score = 95;
String g = score >= 70 ? "C" : score >= 90 ? "A" : "F"; // g = "C"!

明確さのためにかっこを追加

Java ではかっこは必須ではありませんが、読み手にネスト構造を明確に示せます。

各内側の三項演算子をかっこで囲むと、分岐がどのように対応しているかが正確に分かります。

int n = 5;
String s = n < 0 ? "neg" : (n == 0 ? "zero" : "pos");

複数行での整形

長い連鎖は、各条件をそれぞれの行に置くと読みやすくなります。

構造がはしごのように見えるように、? と : の位置をそろえます。

public class Main {
    public static void main(String[] args) {
        int temp = 22;
        String label = temp >= 30 ? "hot"
            : temp >= 20 ? "warm"
            : temp >= 10 ? "cool"
            : "cold";
        System.out.println(label);
    }
}

true の分岐でのネスト

true の分岐の中にもネストできますが、一般的ではなく、読みにくくなります。

そうする場合は、混乱を避けるためにかっこを強く推奨します。

boolean a = true, b = false;
String r = a ? (b ? "both" : "only a") : "neither";

ネストした三項演算子を返す

メソッドは、ネストした三項演算子を1つ使って、複数の結果のうち1つを返せます。

3つまたは4つのケースであれば読みやすさを保てますが、それを超えると複雑になります。

public class Main {
    static String size(int len) {
        return len < 5 ? "short" : len < 10 ? "medium" : "long";
    }
    public static void main(String[] args) {
        System.out.println(size(7));
    }
}

使いどころを見極める

通常、2段階のネストであれば問題ありません。3段階以上になると、理解しにくくなることがよくあります。

連鎖が長くなったら、if/else if のはしごや switch の方が明確で、デバッグもしやすくなります。

連鎖を追跡する

この連鎖を手作業で追ってみましょう。day = 6 の場合、最初の条件は false で、2番目の条件は true です。

そのため、残りを確認することなく結果は "Saturday" になります。

public class Main {
    public static void main(String[] args) {
        int day = 6;
        String name = day == 7 ? "Sunday"
            : day == 6 ? "Saturday" : "Weekday";
        System.out.println(name);
    }
}

クイックチェック

ネストした三項演算子がどのようにグループ化されるか確認しましょう。

まとめ

ネストした三項演算子は条件を連鎖させ、3つ以上の値から1つを選びます。

右結合であるため、false の分岐が残りを取り込みます。条件の順序には注意してください。

明確さのためにかっこと改行を追加し、連鎖が長くなったら if/else に切り替えます。

よくある質問

「三項演算子のネスト」レッスンは無料ですか?

はい。「三項演算子のネスト」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。

「三項演算子のネスト」で何を学びますか?

条件分岐を慎重につなげます。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Java Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「三項演算子のネスト」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJava Academyレッスンでコードを書いて実行できますか?

はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 三項演算子
  2. 三項演算子のネスト
  3. 三項演算子とif/else
  4. 可読性を損なう落とし穴
← Java Academyに戻る