C#に近づいていくJava(Switch式)

C#はVB.netに言語仕様を寄せるため様々な方策を取っている。
Switch文をVB.netのCASE式に近づけるために
フォロースルー等を明示化させたりするのもその一環だろう。

Javaも12よりC#に寄せswitch式が導入され、Java14でyieldが追加され
さらにC#のような使い方が出来るようになった。

exp)
final String result = switch (value) {
case 1 -> {
yield “いち”;
}
case 2 -> {
yield “に”;
}
case 3 -> {
yield “さん”;
}
default -> {
yield “それ以外”;
}
};

ただ、Javaの場合、C#とは異なり
既存のswitch文も残っており、ぱっと見で判断がし難い状態になっている。

switch文)

switch (value) {
case 1:System.out.println(“いち”);
case 2:System.out.println(“に”);
case 3:System.out.println(“さん”);
default:System.out.println(“それ以外”);
}
switch式)

switch (value) {
case 1->System.out.println(“いち”);
case 2->System.out.println(“に”);
case 3->System.out.println(“さん”);
default->System.out.println(“それ以外”);
}

当然ながら、上記の例ではswitch文とswitch式とで
出力される結果も異なるので注意が必要だ。

この、間違えやすい部分を簡単に解決する方法がある。
それは
switch文の時は、戦闘にdefaultを書く。
それだけだ。

switch文)

switch (value) {
default:System.out.println(“それ以外”);
case 1:System.out.println(“いち”);
case 2:System.out.println(“に”);
case 3:System.out.println(“さん”);
}

switch式は分岐(IF文と同様)のため、defaultは末尾に書く必要がある。(elseと同様)
けれどもswitch文は、遷移(goto文)のため、実はdefaultはどこに書いても問題ないのだ。

これからは、switch文を書く事は少なくなるかもしれないが
それでも当面は無くならないので、こういう直ぐに見分けがつくようにするのは手だと思う。