0Pricing
Java Academy · レッスン

複数ラベルのcase

複数のラベルをまとめます

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

ラベルをグループ化する

複数の値で同じ処理を実行したい場合はよくあります。最新の switch では、複数のラベルをカンマで区切って 1 つの case に列挙し、1 つの分岐で処理できます。

カンマ区切りのラベル

-> の前に値をカンマで区切って順番に記述します。いずれかの値が一致すると、その分岐が実行されます。

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

母音を判定する

典型的な用途の 1 つは、5 つの case を別々に記述する代わりに、すべての母音を 1 つの分岐にまとめることです。

public class Main {
    public static void main(String[] args) {
        char c = 'o';
        switch (c) {
            case 'a', 'e', 'i', 'o', 'u' -> System.out.println("Vowel");
            default -> System.out.println("Consonant");
        }
    }
}

式で複数ラベルを使う

複数ラベルの case は switch 式でも使えます。列挙したラベルのどれに一致しても、同じ値を返します。

public class Main {
    public static void main(String[] args) {
        int month = 7;
        String season = switch (month) {
            case 12, 1, 2 -> "Winter";
            case 3, 4, 5 -> "Spring";
            case 6, 7, 8 -> "Summer";
            default -> "Autumn";
        };
        System.out.println(season);
    }
}

String ラベルをまとめる

String 値もまとめることができます。ここでは、複数のコマンド表記を 1 つの処理に対応付けています。

public class Main {
    public static void main(String[] args) {
        String cmd = "quit";
        switch (cmd) {
            case "quit", "exit", "q" -> System.out.println("Closing");
            case "help", "h" -> System.out.println("Showing help");
            default -> System.out.println("Unknown command");
        }
    }
}

enum ラベルをまとめる

enum 定数も同じ分岐にまとめられるため、カテゴリに応じた処理を簡潔に記述できます。

public class Main {
    enum Day { MON, TUE, WED, THU, FRI, SAT, SUN }
    public static void main(String[] args) {
        Day d = Day.SAT;
        String kind = switch (d) {
            case SAT, SUN -> "Rest";
            default -> "Work";
        };
        System.out.println(kind);
    }
}

ラベルの重複は禁止

各ラベルは、switch 全体で 1 回しか記述できません。同じ値を 2 つの分岐に記述すると、コンパイラーがどちらを実行すべきか判断できないため、コンパイルエラーになります。

public class Main {
    public static void main(String[] args) {
        int n = 2;
        switch (n) {
            case 1, 2 -> System.out.println("Low");
            case 3, 4 -> System.out.println("High");
            default -> System.out.println("Other");
        }
    }
}

従来のフォールスルーとの比較

従来のコロン形式では、空の case を共通の本体の上に並べてフォールスルーさせる必要がありました。カンマ構文ははるかに明確で、意図しないフォールスルーも防げます。

public class Main {
    public static void main(String[] args) {
        int code = 3;
        switch (code) {
            case 1, 3, 5, 7, 9 -> System.out.println("Odd");
            case 0, 2, 4, 6, 8 -> System.out.println("Even");
        }
    }
}

ブロックと組み合わせる

ラベルをまとめた case でも、ブロック本体を使えます。一致したラベルのいずれかによって、ブロック全体が実行されます。

public class Main {
    public static void main(String[] args) {
        char grade = 'B';
        switch (grade) {
            case 'A', 'B' -> {
                System.out.println("Pass");
                System.out.println("Well done");
            }
            default -> System.out.println("Try again");
        }
    }
}

yield と組み合わせる

共通の分岐で計算が必要な場合は、グループ化したラベルと yield を組み合わせて使えます。

public class Main {
    public static void main(String[] args) {
        int n = 4;
        int points = switch (n) {
            case 1, 2, 3 -> 10;
            case 4, 5, 6 -> {
                int bonus = n * 2;
                yield 20 + bonus;
            }
            default -> 0;
        };
        System.out.println(points);
    }
}

読みやすさが向上する

複数ラベルの case を使うと、繰り返しの多い長い分岐リストを、意図がひと目で分かる少数のグループにまとめられます。

public class Main {
    public static void main(String[] args) {
        int http = 204;
        String group = switch (http / 100) {
            case 1, 2, 3 -> "OK-ish";
            case 4, 5 -> "Error";
            default -> "Unknown";
        };
        System.out.println(group);
    }
}

確認問題

最新の Java で、複数の値から同じ switch 分岐を実行するにはどうすればよいですか。

まとめ

複数ラベルの case について学びました。

  • -> の前に値をカンマ区切りで列挙する
  • int、char、String、enum で使用できる
  • 従来の形式とは異なり、意図しないフォールスルーが発生しない
  • 各ラベルは1 回だけ記述できる
  • 必要に応じてブロックや yield と組み合わせる

よくある質問

「複数ラベルのcase」レッスンは無料ですか?

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

「複数ラベルのcase」で何を学びますか?

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

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

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

「複数ラベルのcase」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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