0Pricing
Java Academy · レッスン

式としてのswitch

switchから値を返します

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

文と式

文は処理を実行します。式は値を生成します。最新の Java では switch を式として使えるため、その結果を変数に直接代入できます。

switch の結果を代入する

switch が = の右辺にある場合、各分岐が値を提供します。アロー形式では、-> の後にある値が自動的に返されます。

public class Main {
    public static void main(String[] args) {
        int day = 6;
        String type = switch (day) {
            case 6, 7 -> "Weekend";
            default -> "Weekday";
        };
        System.out.println(type);
    }
}

ブロックの後のセミコロン

switch 式は文の一部となるため、閉じ波かっこの後にセミコロンを付けて終了します。これを忘れると、コンパイルエラーになることがよくあります。

public class Main {
    public static void main(String[] args) {
        int n = 2;
        int doubled = switch (n) {
            case 1 -> 2;
            case 2 -> 4;
            default -> 0;
        };
        System.out.println(doubled);
    }
}

網羅性

switch 式では、考えられるすべての値を処理する必要があります。ほとんどの型では、default 分岐を含める必要があります。含めないとコードをコンパイルできません。

public class Main {
    public static void main(String[] args) {
        int score = 85;
        char grade = switch (score / 10) {
            case 10, 9 -> 'A';
            case 8 -> 'B';
            case 7 -> 'C';
            default -> 'F';
        };
        System.out.println(grade);
    }
}

enum では default は不要

enum のすべての定数を処理している場合、コンパイラーはすべての値を網羅していることを認識できます。そのため、default 分岐は省略できます。

public class Main {
    enum Dir { NORTH, SOUTH, EAST, WEST }
    public static void main(String[] args) {
        Dir d = Dir.EAST;
        String label = switch (d) {
            case NORTH -> "Up";
            case SOUTH -> "Down";
            case EAST -> "Right";
            case WEST -> "Left";
        };
        System.out.println(label);
    }
}

直接 return する

メソッドから switch 式を直接 return できるため、簡潔な検索メソッドを作成できます。

public class Main {
    static int sides(String shape) {
        return switch (shape) {
            case "triangle" -> 3;
            case "square" -> 4;
            case "pentagon" -> 5;
            default -> 0;
        };
    }
    public static void main(String[] args) {
        System.out.println(sides("square"));
    }
}

数値の結果

分岐では、数値を返したり、算術演算を行ったり、メソッドを呼び出したりできます。すべての分岐で、代入先の変数と同じ型の値を生成する必要があります。

public class Main {
    public static void main(String[] args) {
        int month = 2;
        int days = switch (month) {
            case 2 -> 28;
            case 4, 6, 9, 11 -> 30;
            default -> 31;
        };
        System.out.println("Days: " + days);
    }
}

結果をその場で使う

switch 式の値は、すぐに使用できます。たとえば、println の呼び出しの中で使うことができます。

public class Main {
    public static void main(String[] args) {
        int code = 1;
        System.out.println("Status: " + switch (code) {
            case 0 -> "OK";
            case 1 -> "Warning";
            default -> "Error";
        });
    }
}

型の一貫性

すべての分岐で、結果の型を一致させる必要があります。ある分岐が int を返し、別の分岐が String を返す場合、コードをコンパイルできません。分岐の型は統一してください。

public class Main {
    public static void main(String[] args) {
        int n = 3;
        double factor = switch (n) {
            case 1 -> 0.5;
            case 2 -> 1.0;
            default -> 1.5;
        };
        System.out.println(factor);
    }
}

三項演算子の連鎖を置き換える

1 つの値を複数の結果に対応付ける場合、入れ子になった三項演算子よりも switch 式のほうが読みやすくなることがよくあります。

public class Main {
    public static void main(String[] args) {
        int rating = 4;
        String stars = switch (rating) {
            case 1 -> "*";
            case 2 -> "**";
            case 3 -> "***";
            case 4 -> "****";
            default -> "*****";
        };
        System.out.println(stars);
    }
}

変数と組み合わせる

switch 式の結果は、ほかの値と同じように、さらに計算で使用できます。

public class Main {
    public static void main(String[] args) {
        int tier = 2;
        int discount = switch (tier) {
            case 1 -> 5;
            case 2 -> 10;
            default -> 0;
        };
        int price = 100 - discount;
        System.out.println("Price: " + price);
    }
}

確認問題

switch 式には、通常 default 分岐を含める必要があるのはなぜですか。

まとめ

switch を式として使う方法を学びました。

  • 代入または return ができる値を生成する
  • 代入の最後にセミコロンを付ける
  • 網羅的でなければならない(通常は default が必要)
  • すべての定数を処理する enum では default は不要
  • すべての分岐で同じ結果の型を使う

よくある質問

「式としてのswitch」レッスンは無料ですか?

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

「式としてのswitch」で何を学びますか?

switchから値を返します ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「式としてのswitch」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. 矢印形式のswitch
  2. 式としてのswitch
  3. yieldキーワード
  4. 複数ラベルのcase
← Java Academyに戻る