1
/
5

フォールスルー

こんにちは、フジボウルの根岸です。

今回は、switch文についてのお話です。
以下にGoとPHPのswitch文があります。

【Go】
i:=1
switch i {
case 0:
fmt.Println("iは0")
case 1:
fmt.Println("iは1")
case 2:
fmt.Println("iは2")
}

【PHP】
$i=1
switch ($i) {
case 0:
echo "iは0";
case 1:
echo "iは1";
case 2:
echo "iは2";
}

このふたつのプログラムの出力結果は、同じになるでしょうか?

答えは、「同じにはならない」です。

Goの方は、
iは1

PHPの方は、
iは1
iは2

と出力されます。
PHPの場合は、以下のようにbreakを記述しないと次のcaseの処理も実行されてしまいます。
意外と書き忘れて意図しない挙動になっていたなどを耳にしたりします。

【PHP】
$i=1
switch ($i) {
case 0:
echo "iは0";
break;
case 1:
echo "iは1";
break;
case 2:
echo "iは2";
break;
}

ちなみにGoでPHPのように次のcaseの処理も実行させたい場合は、fallthroughを記述します。

【Go】
i:=1
switch i {
case 0:
fmt.Println("iは0")
fallthrough
case 1:
fmt.Println("iは1")
fallthrough
case 2:
fmt.Println("iは2")
}

混乱を招くので、こういった同じ構文で言語によって挙動が違うものは、極力ないとありがたいですね。

株式会社フジボウル's job postings

Weekly ranking

Show other rankings