Java の switch 文について

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 文を忘れると意図しない動作を引き起こします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です