フォールスルー

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") } 混乱を招くので、こういった同じ構文で言語によって挙動が違うものは、極力ないとありがたいですね。
--------------------------------------------------
社員を募集しております!

type
開発エンジニア*前職給与保証*リモート可*ブランクOK*案件還元率80%以上*月給35万円~*年休128日

社員のゲーム実況チャンネル
$fugaのゲーム実況

この記事を書いた人

根岸 聖司

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