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")
}

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

株式会社フジボウルからお誘い
この話題に共感したら、メンバーと話してみませんか?
株式会社フジボウルでは一緒に働く仲間を募集しています

同じタグの記事

今週のランキング

根岸 聖司さんにいいねを伝えよう
根岸 聖司さんや会社があなたに興味を持つかも