Java の switch 文について
Java の switch
文は、複数の条件を効率的に処理するための制御構造です。if-else
文の代替として使用され、条件が多い場合にコードの可読性と効率性を向上させることができます。
switch 文とは
Java の switch
文は、特定の式(switch
式)の結果に基づいて、実行するコードブロックを選択する制御構造です。主に次のような用途で使用されます。
- 定数値の比較(
int
,char
,String
,enum
など) - 複数の分岐条件を効率的に処理する
基本構文
switch (式) {
case 値1:
// 値1の場合の処理
break;
case 値2:
// 値2の場合の処理
break;
default:
// どのケースにも一致しない場合の処理
break;
}
この構文の特徴は次のとおりです。
switch
の後の式は整数型、文字型、列挙型、または文字列型でなければなりません。case
の値は重複してはいけません。default
ブロックは任意ですが、省略するとどのケースにも一致しない場合に何も実行されません。
フォールスルーの動作
Java の switch
文はデフォルトで「フォールスルー」という動作をします。これは、case
が一致した後も、break
文がない限り次のケースの処理を続行するという特性です。
例:
int day = 3;
switch (day) {
case 1:
System.out.println("Monday");
case 2:
System.out.println("Tuesday");
case 3:
System.out.println("Wednesday");
default:
System.out.println("Another day");
}
// 出力:
// Wednesday
// Another day
この挙動を防ぐためには、各ケースの最後に break
文を追加します。
break 文の役割
break
文は、現在の switch
ブロックから抜け出すために使用されます。これにより、フォールスルーを防ぐことができます。
例:
int day = 3;
switch (day) {
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
case 3:
System.out.println("Wednesday");
break;
default:
System.out.println("Another day");
}
// 出力: Wednesday
拡張された switch 文(Java 12+)
Java 12 以降では、switch
文が式として拡張されました。この新しい構文により、より簡潔で安全な記述が可能になります。
例:
int day = 3;
String dayName = switch (day) {
case 1 -> "Monday";
case 2 -> "Tuesday";
case 3 -> "Wednesday";
default -> "Another day";
};
System.out.println(dayName);
// 出力: Wednesday
この構文では ->
を使用し、break
を省略できます。また、複数の値を1つのケースで処理することも可能です。
String type = "dog";
String category = switch (type) {
case "dog", "cat" -> "Pet";
case "lion", "tiger" -> "Wild Animal";
default -> "Unknown";
};
System.out.println(category);
// 出力: Pet
例と応用
簡単な例: 季節を表示する
int month = 7;
switch (month) {
case 12: case 1: case 2:
System.out.println("Winter");
break;
case 3: case 4: case 5:
System.out.println("Spring");
break;
case 6: case 7: case 8:
System.out.println("Summer");
break;
case 9: case 10: case 11:
System.out.println("Autumn");
break;
default:
System.out.println("Invalid month");
}
応用例: 列挙型と switch
enum Direction {
NORTH, SOUTH, EAST, WEST
}
Direction dir = Direction.NORTH;
switch (dir) {
case NORTH:
System.out.println("Going North");
break;
case SOUTH:
System.out.println("Going South");
break;
case EAST:
System.out.println("Going East");
break;
case WEST:
System.out.println("Going West");
break;
}
よくあるエラーと注意点
- 型の不一致:
switch
式の型がサポートされていない場合(例:float
型)、コンパイルエラーになります。 - 重複する case: 2つ以上のケースで同じ値を指定するとエラーになります。
- フォールスルーの誤用:
break
文を忘れると意図しない動作を引き起こします。