フォールスルー

2021.08.30

記事画像
こんにちは、フジボウルの根岸です。 今回は、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") } 混乱を招くので、こういった同じ構文で言語によって挙動が違うものは、極力ないとありがたいですね。

この記事を書いた人

根岸 聖司

部長、システムエンジニア