switch文
Javaで従来から利用できるswitch-case文の形式は以下の通り。整数や文字列等が利用可能です。
public void func(int number) {
switch (number) {
case 0:
System.out.println("0");
break;
case 1:
case 2:
System.out.println("1");
System.out.println("2");
break;
default:
System.out.println("-1");
break;
}
}
Java 17 LTSなら拡張switch文が使えます。IntelliJ等のIDEAを使えば、自動でソースコードを変換してくれます。default行は不要な場合は省略できます。
public void func(int number) {
switch (number) {
case 0 -> System.out.println("0");
case 1, 2 -> {
System.out.println("1");
System.out.println("2");
}
default -> System.out.println("-1");
}
}
考えうる全ての処理はcase句で行われ、defaultに来ることが無い場合は、例外をthrowしておくとプログラムの改修時にも安心です。
public void func(int number) {
switch (number) {
case 0 -> System.out.println("0");
case 1, 2 -> {
System.out.println("1");
System.out.println("2");
}
default -> throw new IllegalArgumentException();
}
}
switch式
switch式により粋なコードを書くこともできます。最後のセミコロンは必要です。
int ret = switch (number) {
case 0 -> 0;
case 1, 2 -> 1;
default -> -1;
};
今まで通り、Stringやint等を混ぜることもできます。ブロック{}を利用する場合はyieldで返します。
int ret = switch (str) {
case "0" -> {
yield 0;
}
case "1", "2" -> 1;
default -> -1;
};
拡張switchのメリット
拡張switch表現のメリットには、以下のようなものがあると言われています。
- break文が不要になる
- 複数一致をカンマ区切りでcaseに列挙できる
- ソースコードを少し短くできる
- switch式が使える
- 表記がプログラマーにとって直感的になった?
ラムダ式の苦手意識も自然に解消しそうな便利さです。