break continue goto文の使いどころ

break

breakはループやswitchを中止する時に使います。引数に整数を指定すると、その数値に対応する、入れ子にされた数のループ構造中から抜け出します。

1
2
3
4
5
6
7
8
9
// break
$a=array('jQuery','Perl','css');
foreach($a as $key => $val){
if($val=='Perl'){
echo '「Perlを取得」';
break;
}
echo '「'.$val.'」';
}
実行結果:「jQuery」「Perlを取得」

foreachは配列の中身(要素)を順番に取り出して処理し、無くなると終了します。上記では配列の一番目である「jQuery」要素はそのままecho(エコー)されます。二番目の「Perl」要素はif文でキャッチされて「Perlを取得」とエコーし、次にbreakでforeachを中止します。三番目の「css」要素は二番目で中止されたため、どこにもエコーされません。

1
2
3
4
5
6
7
8
9
10
// break
$a="JAVA";
switch($a){
case 'script':
echo "「script」です。";break;
case 'JAVA':
echo "「JAVA」です。";break;
case 'style':
echo "「style」です。";break;
}
実行結果:「JAVA」です。

gotoやcontinueではなく、breakを用いた例です。$aに「JAVA」を指定しているため、上から二つ目の「case」にキャッチされて、”「JAVA」です。”とエコーし、次のbreakによってswitchを終了しています。

continue

continueはループの途中で次のループをさせる場合に使います。引数に整数を指定すると、その数値に応じた数の入れ子になったloop構造の終了地点までスキップし、次のloopへと移ります。loop内にswitchが存在するケースで、continue 2を指定した場合、外側のloopの次の処理から継続します。

1
2
3
4
5
6
7
8
// continue
$a=array(1,2,3,4,5);
foreach($a as $key => $val){
if(!($val % 2)){
continue;
}
print '「奇数'.$val.'」';
}
実行結果:「奇数1」「奇数3」「奇数5」

gotoやbreakではなく、continueを用いた例です。5行目は配列要素を2で割っていった余りが1か0なのかを判定しています。if文に論理否定演算子を使っているので、「1ではない」という意味になり、「0であれば」continueという処理になります。つまり、余りがなく、綺麗に割り切れてしまった値は偶数ということになり、偶数であれば処理が飛ばされ、奇数だけがprintされるという仕組みです。尚、剰余演算子(%)は、両方の値を整数に直してから使います。浮動小数点の剰余を求めるにはfmod()を使います。

1
2
3
4
5
6
7
8
9
10
// continue
$a="Orange";
switch($a){
case 'Apple':
print "「Apple」です。";continue;
case 'Orange':
print "「Orange」です。";continue;
case 'Banana':
print "「Banana」です。";continue;
}
実行結果:「Orange」です。

breakの代わりにcontinueを使った例です。文字が入れ替わっただけです。

goto

1
2
3
4
5
6
7
8
9
10
// goto
$a=array('swimming','marathon','tennis');
foreach($a as $key => $val){
if($val=="marathon"){
goto check;
}
echo '「'.$val.'」';
}
check:
echo '「gotoで移動した配列要素のmarathonです。」';
実行結果:「swimming」「gotoで移動した配列要素のmarathonです。」

continueやbreakではなく、gotoを用いた例です。一番目の「swimming」要素は通常通り表示されます。二番目の「marathon」要素はif文でキャッチされて、gotoで指定した「check」のある部分まで処理を飛ばされます。この「check」というのは任意につけられる名前で、ジャンプ先にはこの名前とその直後にコロンをつけて指定します。gotoは無条件に処理を移動させますが、関数やメソッド、loop中(while、for、foreach)、switch文の中に飛ばすことはできません。また、同じファイル上でなければなりません。反対にloop中やswitch文からは抜け出すことができます。