ECMAScriptbreakおよびcontinue文

break文とcontinue文はループ内のコードの実行に対してより厳格な制御を提供します。

break文とcontinue文の違い

break文はループを即座に退出し、再度コードの繰り返しを実行することを防ぎます。

一方、continue文は現在のループを退出し、制御表現に基づいて次のループを続けることを許可します。

例えば:

var iNum = 0;
for (var i=1; i<10; i++) {
  if (i % 5 == 0) {
    break;
  }
  iNum++;
}
alert(iNum);	//「4」と表示

上記のコードでは、forループが変数iに対して1から10までの範囲で反復します。ループのメイン部分では、if文が(取模演算子を使用して)iの値が5で割り切れるかどうかをチェックします。割り切れる場合、break文が実行され、alertは「4」と表示され、ループを退出する前にループが実行された回数を表示します。

この例でのbreak文をcontinue文に置き換えた場合、結果は異なります:

var iNum = 0;
for (var i=1; i<10; i++) {
  if (i % 5 == 0) {
    continue;
  }
  iNum++;
}
alert(iNum);	//「8」と表示

ここでは、alert は「8」と表示され、ループが実行される回数です。実行可能なループの総数は9ですが、iの値が5の場合、continue文が実行され、iNum++の表現をスキップし、ループの先頭に戻ります。

タグ付き文と一緒に使用

break文とcontinue文はタグ付き文と一緒に使用して、コード内の特定の場所に戻ることができます。

ループ内にループがある場合、通常このようにします:

var iNum = 0;
outermost:
for (var i=0; i<10; i++) {
  for (var j=0; j<10; j++) {
    if (i == 5 && j == 5) {
    break outermost;
  }
  iNum++;
  }
}
alert(iNum);	//"55"を出力"

上の例では、タグoutermostは最初のfor文を指しています。通常、各for文は10回のコードブロックを実行します。これはiNum++が通常100回実行されることを意味し、実行が完了するとiNumは100に等しいべきです。ここでのbreak文には、ループを停止した後にジャンプする必要がある文のタグが引数としてあります。したがって、break文は内部のfor文(jを使用する文)だけでなく、外部のfor文(iを使用する文)からもジャンプすることができます。したがって、iNumの最終的な値は55で、iとjの値がともに5に等しい場合にループが終了します。

continue文は同様に使用できます:

var iNum = 0;
outermost:
for (var i=0; i<10; i++) {
  for (var j=0; j<10; j++) {
    if (i == 5 && j == 5) {
    continue outermost;
  }
  iNum++;
  }
}
alert(iNum);	//"95"を出力"

上の例では、continue文はループを継続させるために使用され、内部ループだけでなく外部ループも含まれます。jが5に等しい場合にこの状況が発生し、内部ループは5回のイテレーションを減らし、iNumの値が95になります。

ヒント:breakとcontinueと一緒に使用されるタグ付き文は非常に強力ですが、過度な使用はコードのデバッグに問題をもたらす可能性があります。タグを使用する際には、説明性のあるタグを使用し、ループの層を多く入れないようにしてください。

ヒント:タグ付き文とは何か知りたい場合は、以下を参照してください ECMAScriptラベル文 このセクション。