恥ずかしながら、業務でswitch文を使用した際に、break
を書き忘れました。
ほかに原因があると勘違いしたため、気づくまでに30分を無駄にしました。
今回は自戒のためにも、Switch文について再度まとめてみます。
※個人的な備忘ですので、誤りがある場合はご指摘いただけますと幸いです。
Switch文とは?
switch文は複数の条件分岐を記載するための構文の一つです。
条件分岐というとif文が思い当たりますが、switch文はif文と同様の働きを行います。
ただし、分岐数が多い場合には、if文よりも簡潔に記載することができる構文です。
基本構文
実際に使い方を見ていきます。
今回は、文字列型変数 today
に入っている値に対応する文字列を出力するコードで見てみます。
String today = "木曜日";
switch (today) {
case "日曜日":
System.out.println("Sunday");
break;
case "月曜日":
System.out.println("Monday");
break;
case "火曜日":
System.out.println("Tuesday");
break;
case "水曜日":
System.out.println("Wednesday");
break;
case "木曜日":
System.out.println("Thursday");
break;
case "金曜日":
System.out.println("Friday");
break;
default:
System.out.println("Saturday");
}
Thursday
基本的には上記のような書き方となります。
サンプルでは、文字列型変数の today
に "木曜日"
という文字列が代入されています。
switch文では最初に式を評価した後に、case
に記載されているラベルと一致した値がある場合に、そのラベル内の処理を実行します。
今回の例では today
は 木曜日
であるため、case "木曜日"
のラベルの処理が実行され、Thursday
を出力しました。
また、どの条件にも一致しない場合は、default
の処理が実行されます。default
の記載は任意で、breakを記載する必要はありません。
そのほかのラベルには break
を記載する必要があります。記載をしない場合でもコンパイルエラーとはなりませんが、一致した値以降の case
処理がすべて実行されてしまいます。このことをフォールスルーと呼びます。(今回この記事を書くにあたって初めて知りました。)
実際にフォールスルーの場合も試してみます。
String today = "木曜日";
switch (today) {
case "日曜日":
System.out.println("Sunday");
case "月曜日":
System.out.println("Monday");
case "火曜日":
System.out.println("Tuesday");
case "水曜日":
System.out.println("Wednesday");
case "木曜日":
System.out.println("Thursday");
case "金曜日":
System.out.println("Friday");
default:
System.out.println("Saturday");
}
Thursday
Friday
Saturday
today
は 木曜日
であるため、case "木曜日"
以降のすべてのラベルの処理が実行され、Thursday
Friday
Saturday
を出力しました。
今回、本記事をまとめる中で、break
を書かなくてもSwitch文が動作する処理もあるらしいと知りましたので、break
なしの方法についてもまとめてみます。
アロー構文
アロー構文では、case 条件
を記載した後に '->' という記号を書きます。
'->' の後に処理を記載します。
String today = "木曜日";
switch (today) {
case "日曜日" -> System.out.println("Sunday");
case "月曜日" -> System.out.println("Monday");
case "火曜日" -> System.out.println("Tuesday");
case "水曜日" -> System.out.println("Wednesday");
case "木曜日" -> System.out.println("Thursday");
case "金曜日" -> System.out.println("Friday");
default ->{
System.out.println("Saturday");
}
}
アロー構文の場合だと、上記の通り、:
と break
を省略できるため便利です。
まとめ
今回は初歩的なところでswitch文についてまとめてみました。
条件分岐としてはif文と同じことができますが、if文よりはコードがすっきりして見えるので、私はswitch文のほうが好きです。
調べていく中でアロー構文なるものも知ることができたので、breakし忘れる私にもピッタリだと思います。
【参考】
https://www.javadrive.jp/start/if/index4.html
https://qiita.com/dhirabayashi/items/2999b04a369379f41675