目次
概要
for 文や while 文などの反復処理において、ある特定の条件に当てはまる場合だけ処理を行わず、次のループ(周回)へ進みたい場合に continue 文を使用します。 これにより、深い if 文の入れ子(ネスト)を防ぎ、コードの可読性を高めることができます。 本記事では、偶数を除外して奇数のみを出力する基本的な例を通して、continue の挙動を解説します。
仕様(入出力)
- 入力: 0から9までの数値カウンター
- 出力:
- 条件(偶数)に合致した場合はログ出力をスキップ
- 条件に合致しない(奇数)場合のみコンソールに数値を出力
基本の使い方
ループブロック内の任意の場所で continue; を記述します。 この行が実行されると、それ以降の処理は無視され、ループの先頭(増減式や条件判定)に戻ります。
コード全文(HTML / JavaScript)
HTML (index.html)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>continue文デモ</title>
<script src="continue-demo.js" defer></script>
</head>
<body>
<div class="container">
<h1>Consoleを確認してください</h1>
<p>奇数のみがフィルタリングされて出力されます。</p>
</div>
</body>
</html>
JavaScript (continue-demo.js)
if 文の入れ子を使う書き方と、continue を使ったスマートな書き方を比較できる構成にしています。
/**
* 偶数をスキップして奇数のみ処理する関数
* ガード節(Guard Clause)としてcontinueを使用します。
*/
const printOddNumbers = () => {
console.log("--- ループ処理開始 ---");
for (let i = 0; i < 10; i++) {
// 条件: i が偶数(2で割り切れる)の場合
if (i % 2 === 0) {
// ここでcontinueすると、以下のconsole.logは実行されず、
// 次のループ(i++)へ即座に移動します。
continue;
}
// ここに到達するのは「偶数以外(奇数)」の時だけです
console.log(`奇数を発見: ${i}`);
}
console.log("--- ループ終了 ---");
};
// 実行
printOddNumbers();
カスタムポイント
- 除外条件の変更:
i % 2 === 0をi % 3 === 0に変えれば「3の倍数をスキップ」する処理になります。 - 特定値の除外: リスト処理などで
if (item === null) continue;とすることで、無効なデータだけ飛ばして処理を続ける実装が可能です。
注意点
- breakとの違い:
breakはループそのものを「中断・終了」させますが、continueは「今回の周回だけ中断して次はやる」という違いがあります。混同しないようにしましょう。 - while文での使用:
while文の中でcontinueを使う際、変数の更新(i++など)より前にcontinueしてしまうと、変数が更新されずに永遠に同じ値でループし続ける「無限ループ」に陥る危険があります。while内では特に記述位置に注意が必要です。
応用
入れ子の解消(ガード節)
複雑な条件分岐がある場合、continue を使うことでコードの階層を浅く保つことができます。
// 【悪い例】if文が深くネストしている
/*
for (let i = 0; i < 10; i++) {
if (isSystemActive) {
if (i % 2 !== 0) {
console.log(i);
}
}
}
*/
// 【良い例】continueで条件に合わないものを先に弾く
const processWithGuard = (isSystemActive) => {
for (let i = 0; i < 10; i++) {
// システム停止中ならスキップ
if (!isSystemActive) continue;
// 偶数ならスキップ
if (i % 2 === 0) continue;
// すべてのチェックを通過した(奇数かつシステム稼働中)
console.log(i);
}
};
まとめ
continue 文は「不要なものを先に除外する(早期リターン)」という考え方に基づいた制御構文です。これを利用することで、「もし~なら処理する」という深い入れ子構造を避け、「~ならスキップする」という平坦で読みやすいコードを書くことができます。
