Swiftではswitch文のbreakは基本的に不要

注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。

C言語やその系統の言語では、多くの場合、switch文を使う場合、各caseの最後には意図的にフォールスルーを行う場合を除けばbreak文を付与しなければならなかった。というのは、C言語においては、各caseはラベルとしての意味合いしかなかったからである(C言語におけるswitch文の落とし穴も参照)。さて、Swiftではどうなっているだろうか。ここではそれについて説明を行いたい。

まず、C言語では多くの場合、以下のようなコードにしていただろう。

int num = getNum();
switch (num) {
case 0:
    printf("num: 0\n");
    break;
case 1:
    printf("num: 1\n");
    break;
case 2:
    printf("num: 2\n");
    break;
default:
    printf("default\n");
    break;
}

一方、これをSwiftにした場合は、以下のような記述になる。

let num = getNum()
switch num {
case 0:
    print("num: 0")
    break
case 1:
    print("num: 1")
    break
case 2:
    print("num: 2")
    break;
default:
    print("default")
    break
}

これは、C言語と同様の記述である。ちなみに、Swiftでは、以下の記述の仕方もできる。

let num = getNum()
switch num {
case 0:
    print("num: 0")
case 1:
    print("num: 1")
case 2:
    print("num: 2")
default:
    print("default")
}

上記のコードでも、breakがある場合と同様の処理になる。というのは、Swiftではラベルとしての役割にとどまらず、制御ブロックとしても機能しているからである。

なお、Swiftでもbreakが必要になるケースがあるが、これは、何も処理が書かれていない場合に限られる。

なお、明示的にフォールスルーしたいときは、fallthroughを明記する。

Swiftでは、C言語とは正反対の制御になるため、混乱を招く危険性がある。それを防ぐために明示的にbreak文を加えることは悪いわけではないが、ちゃんと切り替えられるようにした方が良いだろう。

タイトルとURLをコピーしました