1. 導入:なぜswitch式を学ぶ必要があるのか
Javaを使っていて「if-elseが長くなりすぎて読みづらい」と感じたことはありませんか?Java 12以降で導入された「switch式」は、従来の「switch文」の弱点であった記述の冗長さを解消し、より簡潔で安全なコードを書くために不可欠な技術です。本記事では、この両者の違いを理解し、現場で即戦力となるコードの書き方を解説します。
2. 基礎知識:文(statement)と式(expression)の違い
まず「文」と「式」の違いを理解しましょう。
文(Statement)は「何らかの処理を実行するもの」で、それ自体は値を返しません。これまでのswitch文は「分岐した先で値を代入する」という手続きが必要でした。
一方、式(Expression)は「評価された結果、何らかの値を返すもの」です。switch式を使うと、分岐の結果を直接変数に代入できるため、コードが劇的にスッキリします。
3. 実装/解決策:書き方の大きな違い
switch式では、従来の「break」を書き忘れて意図しない処理が実行される(フォールスルー)というバグを防ぐため、新しい構文が採用されています。また、値を返すために「yield」キーワードを使用します。
4. サンプルプログラム
以下のコードで、従来の「文」とモダンな「式」の書き方を比較してみましょう。
// 従来のswitch文:breakを書き忘れるとバグになる
int dayType;
switch (day) {
case “土”, “日”:
dayType = 0;
break;
default:
dayType = 1;
break;
}
// モダンなswitch式:簡潔で安全。break不要
int dayType = switch (day) {
case “土”, “日” -> 0; // アロー演算子で値を直接返す
default -> {
// 複雑な処理が必要な場合はブロックを使う
System.out.println(“平日です”);
yield 1; // yieldで値を返す
}
};
5. 応用・注意点:現場での活用法
現場でさらに安全性を高めるには、sealed class(封印クラス)との組み合わせが最強です。switch式で列挙型や封印クラスを扱う際、すべてのパターンを網羅していないとコンパイルエラーになるため、将来的にクラスが増えた際の修正漏れを未然に防ぐことができます。
注意点として、switch式は「網羅性」が必須です。すべてのケースを網羅していない場合、コンパイルエラーになります。これは「バグを未然に防ぐ」というJavaの設計思想ですので、default句を安易に書くのではなく、可能な限り明示的なケースを記述するようにしましょう。これこそが、シニアエンジニアが意識している「堅牢なコード」への第一歩です。

コメント