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