JavaのSwitch Expressionsに慣れる

GMOアドマーケティングのT.Nです。

Java 14でSwitch ExpressionsがPreviewからStandardになりました。

Switch Expressionsについては既に多くの記事や説明が存在すると思いますが、
今回は自分がSwitch Expressionsに慣れるためにソースコードを書いて動かしてみました。

Switch Expressionsとは

Switch Expressionsを日本語にするとSwitch式です。
Switch文から値を返せるようになり、式として扱えるようになりました。

Switch ExpressionsはJava 12でPreviewとして追加されました。

Java 12での変更点

  • ラベルに矢印(->)を使用できるようになった
  • ラベルを複数指定できるようになった
  • 値を返せるようになった

ソースコードで説明すると以下のようになります。

渡されたenumの定数(曜日)に応じて、勤務形態を返す処理です。
Switch式を使用すると、このように分岐と代入を簡潔に行うことができます。

ちなみに、この例では火曜日と水曜日が在宅勤務ということになっていますが、
現在GMOインターネットグループでは週1-3日の在宅勤務が推奨されていて、
GMOアドマーケティングのエンジニアはチームごとに出社日をずらして、
週に2日在宅勤務を行っています。

矢印(->)を使用した場合は、
fall throughが行われないという点も重要です。

Switch文でbreakを書かないと、
一度ラベルに一致したらfall throughが行われ、
後続のcaseの処理も実行されますが、
矢印を使用した場合は、fall throughは行われません。

fall throughが行われる例

fall throughが行われない例

これにより、breakの書き忘れにより意図しない実行結果になることを防ぐことができます。

Java 13での変更点

  • yieldが追加された

Java 12では、Switch式から値を返す場合に、
breakの後に値を記述していましたが、
Java 13からは、yieldの後に記述するようになりました。

yieldの使用例

コロン(:)のラベルを使う場合は、
yieldを書かないと、Switch文でbreakを書かなかった場合と同じように、
fall throughが行われるので注意が必要です。

Switch式から値を返す場合にはyield、
Switch文でfall throughを中断する場合にはbreak、
というように使い分けます。

まとめ

今回のブログを通してSwitch Expressionsについて学ぶことができました。
新機能が増えると開発も楽しくなると思うので、
今後もJavaに新機能が追加されていくことを期待しています。

参考にしたページ

JEP 361
switch-expressions