1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

恥ずかしながら、業務でswitch文を使用した際に、break を書き忘れました。
ほかに原因があると勘違いしたため、気づくまでに30分を無駄にしました。

今回は自戒のためにも、Switch文について再度まとめてみます。
※個人的な備忘ですので、誤りがある場合はご指摘いただけますと幸いです。

Switch文とは?

switch文は複数の条件分岐を記載するための構文の一つです。
条件分岐というとif文が思い当たりますが、switch文はif文と同様の働きを行います。
ただし、分岐数が多い場合には、if文よりも簡潔に記載することができる構文です。

基本構文

実際に使い方を見ていきます。
今回は、文字列型変数 today に入っている値に対応する文字列を出力するコードで見てみます。

Weekend.java
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 処理がすべて実行されてしまいます。このことをフォールスルーと呼びます。(今回この記事を書くにあたって初めて知りました。)

実際にフォールスルーの場合も試してみます。

Weekend.java
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 条件 を記載した後に '->' という記号を書きます。
'->' の後に処理を記載します。

Weekend.java
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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?