Break文
From Wikipedia, the free encyclopedia
構文と意味
例
C言語において、単純なループからbreak文を使って抜ける例を示す。
while (1) {
if (条件式) break;
}
この例では、if文の条件式が成立するとbreak文が実行され、このループの直後に制御が移される。
switch文から脱出する例も示す。詳細はswitch文を参照。
switch (式) {
case 定数式:
文
break;
default:
文
break;
}
多重ループからの抜け出し
C言語
最初の例として、内側のループからの抜け出しを示す。
while (1) {
while (1) {
if (条件式) break;
}
}
このコードのbreak;は内側のループのみから抜け出す。外側のwhileループは無限ループになる。
次に、多重ループからの抜け出しについて論じる。
C言語では、多重ループから一気に抜ける際にはgoto文を使用することができる[2]。
while (1) {
while (1) {
if (条件式) goto label;
}
}
label: ;
もしgoto文を使わずにbreak文を使って書くとすれば、一例としては以下のようになり、複雑かつ冗長となる。複雑度の上昇はバグの混入を許す原因ともなる。
int flag = 0;
while (1) {
while (1) {
if (条件式) {
flag = 1;
break;
}
}
if (flag == 1) {
break;
}
}
ほかにも、関数をそのまま脱出して呼び出し元に制御を返してよいということが前提にあるのであれば、多重ループを脱出するのにreturn文を使うこともできる。
while (1) {
while (1) {
if (条件式) return;
}
}
このような場合について、gotoを使うのと同程度に明瞭簡潔に書けるようにするため、次節以降で述べるように、gotoを廃した言語では、ラベル付きbreakなどの「弱められたgoto」と言えるような機能が考案されている。
Java および JavaScript
label: // 外側のwhile文にラベルをつける
while (true) {
while (true) {
if (条件式) break label;
}
}
JavaやJavaScriptはgoto文をサポートしておらず、代わりにラベル指定付きのbreak文を使うことで多重ループから一気に抜けることができる。
PHP
while (true) {
while (true) {
if (条件式) break 2;
}
}
PHPではgoto文がバージョン5.3から実装されたが、break文にループを抜ける段数を指定することも可能である[3]。