導入
「曜日ごとに」「月ごとに」など、1つの値がとりうるパターンがいくつもある場合、if / else if を並べ続けるより switch を使ったほうがすっきり書けます。Javaの switch には、昔からある書き方と、新しい書き方の2種類があります。
説明
まず、昔からある classic 形式(case: と break;)です。
public class Main {
public static void main(String[] args) {
int day = 3;
switch (day) {
case 1:
System.out.println("月曜日");
break;
case 2:
System.out.println("火曜日");
break;
case 3:
System.out.println("水曜日");
break;
default:
System.out.println("その他");
break;
}
}
}
case 1:…dayが1のときにここから実行されます。break;… ここでswitchを抜けます。breakを書き忘れると、次のcaseまでそのまま処理が続いてしまう(フォールスルー)ので要注意です。default:… どのcaseにも当てはまらないときの受け皿です。
新しい アロー形式(->)では break が不要で、しかも値を返す式として使えます。
public class Main {
public static void main(String[] args) {
int day = 6;
String name = switch (day) {
case 1, 7 -> "週末に近い";
case 6 -> "土曜日";
default -> "平日";
};
System.out.println(name);
}
}
case 1, 7 -> "..."… カンマで複数の値をまとめて1つのcaseにできます。->の右側がそのままcaseの結果になり、フォールスルーの心配がありません。String name = switch (...) { ... };のように変数へ直接代入できるのも大きな利点です。
やってみよう
下のエディタで day の値を変え、classic形式の表示が変わることを確かめましょう。break を1つ消してみて、フォールスルー(次の case まで実行されてしまう)を体験してみるのもよい勉強になります。
演習
int month = 12; を用意し、アロー形式の switch で 12, 1, 2 なら "冬"、3, 4, 5 なら "春"、6, 7, 8 なら "夏"、9, 10, 11 なら "秋" を season に入れて表示してください(結果は 冬)。
ヒント1を見る
String season = switch (month) { case 12, 1, 2 -> "冬"; ... }; の形にします。
ヒント2を見る
default も忘れずに書いておくとコンパイルエラーを防げます(例: default -> "?";)。