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:の形で文へ付ける名前。
- 到達不能
- 実行が到達しないとコンパイル時規則で判断される状態。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
確認問題の出題・採点や学習履歴の保存にはログインが必要です。