「switch文」はJavaのプログラミングで条件によって処理を分けたいときに使う、とっても便利な機能だよ。Javaプログラミングの学習を進めていくと、「switch文」の他に、なんだか似ている「switch式」というものがあることに気づくはず。
今回はJavaの「switch式」について、「switch文」との違いに注目しながら、Java初心者さんにも分かりやすく解説していくね!
switch文、覚えてる?
以前の記事(条件がたくさんある時、どうする? switch文でスマートに解決! | ToolDocs)で「switch文」について解説したのを覚えてるかな? 「switch文」は、こんな風に書くんだ。
Java
int signal = 1; // 1:青, 2:黄, 3:赤
switch (signal) {
case 1:
System.out.println("進め!");
break;
case 2:
System.out.println("注意!");
break;
case 3:
System.out.println("止まれ!");
break;
default:
System.out.println("エラー: 不明な信号です");
break;
}
このコードでは、signalの値によって表示するメッセージを変えているよね。「switch文」の特徴は、caseの後にコロン(:)があって、処理の最後にbreak;を書くこと。そして、それぞれのcaseで実行したい処理を書くんだ。
switch式ってなんだ?
さて、今回の主役「switch式」の登場! 「switch式」は、Java 14から正式に導入された新しい機能なんだ。見た目は「switch文」にそっくりなんだけど、大きな違いがあるよ。それは、「switch式は値を返す」ということ。
まずはコードを見てみよう。さっきの「switch文」と同じことを「switch式」で書いてみるね。
Java
int signal = 1; // 1:青, 2:黄, 3:赤
String message = switch (signal) {
case 1 -> "進め!";
case 2 -> "注意!";
case 3 -> "止まれ!";
default -> "エラー: 不明な信号です";
};
System.out.println(message);
どうかな? 結構スッキリした印象じゃない? 「switch文」との違いを見ていこう。
1. アロー演算子(->)を使う
「switch式」では、caseの後にコロン(:)ではなく、アロー演算子(->)を使うんだ。このアロー演算子の右側に、そのcaseで返したい値を直接書くことができるよ。
2. break;がいらない
アロー演算子を使うと、break;を書く必要がなくなるんだ。これは「switch文」でよくある「break;を書き忘れて意図しないcaseの処理まで実行されちゃう」っていうミス(フォールスルーって言うよ)を防げるから、すごく便利なんだ。
3. 値を返せる
一番のポイントはここ! 「switch式」は、評価した結果の値を返すことができるんだ。上の例だと、signalの値に応じて返された文字列がmessage変数に代入されているよね。
これが「switch文」との決定的な違いだよ。「switch文」は処理を実行するだけで、値を返すことはできないんだ。
switch文とswitch式の使い分け
じゃあ、どんなときに「switch文」を使って、どんなときに「switch式」を使えばいいんだろう?
switch文が向いているケース
- 値を返さずに、特定の処理を実行したい場合 例えば、ファイルの保存処理とか、データベースへの書き込みとか、何か状態を変更するような処理の場合だね。値を返す必要がないなら、「switch文」でも十分だよ。
Java
// 例:ユーザーの操作に応じて処理を実行
String action = "save";
switch (action) {
case "save":
System.out.println("ファイルを保存しました。");
// ファイル保存の具体的な処理(値を返す必要なし)
break;
case "delete":
System.out.println("ファイルを削除しました。");
// ファイル削除の具体的な処理
break;
default:
System.out.println("不明な操作です。");
break;
}
switch式が向いているケース
- 条件に応じて異なる値を生成したい場合 「switch式」の最大のメリットは、値を返せること。だから、条件によって結果の値を切り替えたいときに大活躍するよ。
Java
// 例:曜日に応じてメッセージを生成
String dayOfWeek = "Monday";
String greeting = switch (dayOfWeek) {
case "Monday" -> "月曜日、頑張ろう!";
case "Friday" -> "華金だね!";
case "Sunday" -> "良い休日を!";
default -> "特にない日だね。";
};
System.out.println(greeting);
- コードをより簡潔に書きたい場合 「switch式」を使うと、同じ処理を「switch文」で書くよりも行数が減って、コードがスッキリすることが多いよ。特に、返したい値が単純な場合は効果が大きいね。
switch式のもう少し詳しい使い方
複数の値をまとめて処理
caseで複数の値をまとめて指定することもできるよ。カンマ(,)で区切って書くんだ。
Java
int day = 6; // 1:月, ..., 7:日
String typeOfDay = switch (day) {
case 1, 2, 3, 4, 5 -> "平日";
case 6, 7 -> "週末";
default -> "不正な値";
};
System.out.println(typeOfDay); // 出力: 週末
複雑な処理で値を返す場合
アロー演算子(->)の右側に書くのは、単一の値だけじゃなくて、ブロック({})で囲んだ処理も書けるよ。その場合は、最後にyieldキーワードを使って値を返すんだ。
Java
int score = 85;
String grade = switch (score / 10) { // スコアを10で割って評価
case 10, 9 -> {
System.out.println("素晴らしいスコアです!");
yield "A";
}
case 8 -> {
System.out.println("良いスコアです!");
yield "B";
}
case 7 -> {
System.out.println("まずまずのスコアです。");
yield "C";
}
default -> {
System.out.println("もう少し頑張りましょう。");
yield "D";
}
};
System.out.println("あなたの評価は: " + grade);
この例だと、scoreが85だから、score / 10は8になるよね。だからcase 8のブロックが実行されて、「良いスコアです!」と表示された後、"B"がgrade変数に代入されるんだ。
yieldは「switch式」の中で値を返すときに使う特別なキーワードだよ。「switch式」の中で複雑な計算をして、その結果を返したいときに使うと便利だね。
まとめ
今回の記事では、「switch式」について「switch文」との違いを比較しながら見てきたよ。
- 「switch文」は、条件に応じて処理を実行するもの。
:とbreak;を使う。 - 「switch式」は、条件に応じて値を返すもの。
->を使う。break;は不要。 - 「switch式」はJava 14から導入された新しい機能で、コードをより簡潔に書ける。
- 複雑な処理の結果を返す場合は、ブロックを使って
yieldキーワードで値を返す。
「switch式」は、Javaのコードをより分かりやすく、そして安全に書くための強力なツールだよ。最初は少し戸惑うかもしれないけど、慣れてくるとその便利さに気づくはず! ぜひ実際にコードを書いて、色々なパターンを試してみてね。
次回の記事も、Javaの便利な機能について解説していくから、お楽しみに!(ToolDocs | 様々なツールや技術情報を紹介します)


コメント