矢印形式の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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 矢印形式のswitch
- 式としてのswitch
- yieldキーワード
- 複数ラベルのcase