break・continueの違いと使い分け

breakは対象の構文を終了し、continueは対象ループの次の反復へ進みます。同じ条件で置き換えたコードを比較し、残る表示、合計、更新後の値、入れ子の到達先を区別します。

この単元で学ぶこと

  • breakの終了対象を判断する
  • break後に省略される処理を追う
  • ラベルありbreakの到達先を判定する

本文解説

検索終了と除外 配列を調べて最初の負数で終了するならbreak、負数だけを計算から除外するならcontinueです。{2,-1,3}の合計は前者2、後者5です。停止条件と除外条件は似たif文で書けても、ループ全体の目的が異なります。

同じ条件で表示を比較 forでi=0から3まで回りi==1でbreakすると0だけです。同じ場所でcontinueなら023です。どちらもその回の後半を省略しますが、将来の反復を実行するかが違います。

for更新の差 int i=0;for(;i<3;i++){if(i==1)break;}なら終了時i=1です。continueならi++へ進んで最後i=3です。breakを実行したあと更新式を行うという解釈は誤りです。

while条件の評価 while内でbreakすれば直ちにループ後へ移るため、次の条件評価は行いません。continueなら条件を再評価します。条件式に増分が含まれている場合は、この差がカウンタの最終値へ表れます。

switchとの組合せ switch内のbreakはswitchを終了し、外側ループ本体の残りへ進みます。同じ場所のcontinueは周囲のループを対象として、その本体の残りも省略します。二つの制御文で最も近い対象が異なる場合があります。

ラベルを付けた外側制御 break outerは外側全体を終えます。continue outerは外側の次の反復へ進みます。いずれも現在の内側ループの残りは省きますが、外側の未来の処理は異なります。

ラベル文の種類 break labelはラベル付きブロックを終了できますが、continue labelはループを指す必要があります。構文が同じ位置に書けそうでも、終了先の種類の制約が違います。未定義ラベルはどちらも不正です。

returnとの境界 breakとcontinueはループ等の制御であり、通常はメソッド後半へ最終的に進みます。returnは現在のメソッドを終了します。共通の終了表示や計算結果の返却が必要な場合、どの制御を選ぶかで実行されるかが変わります。

図解

終了と次の反復の比較
どの構文に対する制御かを特定してから、到達する文を追う。

重要ポイント

  • ラベルなしbreakは最も内側のループまたはswitchを抜ける。
  • ifはbreakの終了対象にならない。
  • break後は対象構文の直後へ進む。
  • ラベルありbreakはそのラベルの文全体を抜ける。

間違えやすい点

  • breakをメソッド全体の終了と思わない。
  • 内側ループのbreakで外側まで終了したと考えない。
  • 無条件breakの直後に到達不能な文を書かない。

用語解説

break
指定されたループ、switch、ラベル文から抜ける制御文。
ラベル
name:の形で文へ付ける名前。
到達不能
実行が到達しないとコンパイル時規則で判断される状態。

関連教材

参考資料

教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。

確認問題の出題・採点や学習履歴の保存にはログインが必要です。