0Pricing
Java Academy · レッスン

矢印形式のswitch

現代的なswitchの矢印構文を使用します

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

古い switch の問題

従来の Java の switch 文では、コロン形式のラベルを使い、各 case の後に break を記述する必要がありました。break を書き忘れると、実行が次の case に進んでしまうフォールスルーというバグが発生しました。

最新の Java(14 以降)では、この問題を完全に解決するアロー構文が導入されています。

アロー構文の基本

アロー形式の switch では、各ラベルに : の代わりに -> を使います。フォールスルーは発生せずbreak も不要です。各分岐では、その分岐に対応するコードだけが実行されます。

public class Main {
    public static void main(String[] args) {
        int day = 3;
        switch (day) {
            case 1 -> System.out.println("Monday");
            case 3 -> System.out.println("Wednesday");
            default -> System.out.println("Other day");
        }
    }
}

break はもう不要

従来の形式では、各 case の後に break; を記述する必要がありました。アロー形式では、その負担が完全になくなります。一致した分岐だけが実行されます。

public class Main {
    public static void main(String[] args) {
        char grade = 'B';
        switch (grade) {
            case 'A' -> System.out.println("Excellent");
            case 'B' -> System.out.println("Good");
            case 'C' -> System.out.println("Average");
            default -> System.out.println("Needs work");
        }
    }
}

ブロック本体

分岐に複数の文が必要な場合は、波かっこ { } で囲みます。ブロックには、任意の数の文を含めることができます。

public class Main {
    public static void main(String[] args) {
        int code = 2;
        switch (code) {
            case 2 -> {
                System.out.println("Processing code 2");
                System.out.println("Done");
            }
            default -> System.out.println("Unknown");
        }
    }
}

String で switch を使う

アロー形式の switch は、従来の形式と同じように String 値にも使えます。内部では equals を使って比較するため、大文字と小文字が区別されます。

public class Main {
    public static void main(String[] args) {
        String fruit = "apple";
        switch (fruit) {
            case "apple" -> System.out.println("Red or green");
            case "banana" -> System.out.println("Yellow");
            default -> System.out.println("Unknown fruit");
        }
    }
}

default 分岐

default 分岐は、ほかの case で扱われていない値を処理します。予期しない入力にも適切に対応できるよう、常に含めることをおすすめします。

public class Main {
    public static void main(String[] args) {
        int level = 99;
        switch (level) {
            case 1 -> System.out.println("Beginner");
            case 2 -> System.out.println("Intermediate");
            default -> System.out.println("Unknown level: " + level);
        }
    }
}

enum で switch を使う

アロー形式の switch は enum 型と非常に相性がよい構文です。各ラベルで enum 名のプレフィックスを省略できるため、分岐を短くすっきりと書けます。

public class Main {
    enum Color { RED, GREEN, BLUE }
    public static void main(String[] args) {
        Color c = Color.GREEN;
        switch (c) {
            case RED -> System.out.println("Stop");
            case GREEN -> System.out.println("Go");
            case BLUE -> System.out.println("Calm");
        }
    }
}

分岐内でメソッドを呼び出す

各アロー分岐では、任意のメソッドを呼び出せます。実際の処理を別の場所に委譲できるため、switch を読みやすく保てます。

public class Main {
    static void greet(String who) {
        System.out.println("Hello, " + who);
    }
    public static void main(String[] args) {
        int who = 1;
        switch (who) {
            case 1 -> greet("Alice");
            case 2 -> greet("Bob");
            default -> greet("Stranger");
        }
    }
}

if-else よりも読みやすく

アロー形式の switch は、長い if-else の連鎖を置き換えられることがよくあります。1 つの変数を複数の固定値と比較する場合、switch のほうが読みやすくなります。

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

副作用のみ

ここで使っているアロー形式の switch 文は処理を実行しますが、値は生成しません。値を返すには switch 式を使います。これは次のレッスンで扱います。

public class Main {
    public static void main(String[] args) {
        int n = 5;
        switch (n % 2) {
            case 0 -> System.out.println(n + " is even");
            case 1 -> System.out.println(n + " is odd");
        }
    }
}

複数の値を 1 つの分岐で処理する

複数の値をカンマで区切ると、同じ分岐で処理できます。これは、後で扱う複数ラベルの case の導入です。

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

確認問題

従来のコロン形式と比べた、アロー形式の switch の主な利点は何ですか。

まとめ

最新のアロー形式の switch 構文について学びました。

  • : の代わりに -> を使う
  • フォールスルーが発生せず、break も不要
  • 複数の文を含む分岐には波かっこ { } を使う
  • ラベルをカンマで区切ると、同じ分岐で処理できる
  • 常に default 分岐を含める

よくある質問

「矢印形式のswitch」レッスンは無料ですか?

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

「矢印形式のswitch」で何を学びますか?

現代的なswitchの矢印構文を使用します ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「矢印形式のswitch」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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