フォールスルー
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のゲーム実況
社員を募集しております!
type
開発エンジニア*前職給与保証*リモート可*ブランクOK*案件還元率80%以上*月給35万円~*年休128日
社員のゲーム実況チャンネル
$fugaのゲーム実況