JavaScriptのbreak文とcontinue文の使い方を徹底解説

JavaScriptのbreak文とcontinue文は、ループの制御に欠かせない基本文法です。これらの制御文を適切に使うことで、効率的で読みやすいコードを作成できます。本記事では、break文とcontinue文の基本的な使い方から、実際の応用例までを詳しく解説します。具体的なコード例や演習問題を通じて、理解を深め、実践的なスキルを習得しましょう。まずは、break文の基本的な役割とその使用方法について見ていきます。

目次

break文とは

break文は、ループ処理やswitch文の実行を途中で停止するための制御文です。特定の条件が満たされた時点でループやswitch文を終了し、次の処理に進みます。これにより、無駄な繰り返しを避けたり、特定の条件に達した時点で早期にループを抜けたりすることができます。break文は、forループ、whileループ、do…whileループ、およびswitch文で使用されます。次に、break文の基本的な使用方法を具体的な例を通じて説明します。

break文の使用例

基本的な使用例

以下は、forループ内でbreak文を使用する例です。このコードは、0から10までの数値をループし、変数iが5になった時点でループを終了します。

for (let i = 0; i < 10; i++) {
    if (i === 5) {
        break;
    }
    console.log(i);
}

このコードを実行すると、0から4までの数値がコンソールに出力され、iが5になった時点でループが終了します。

whileループでの使用例

whileループ内でbreak文を使用する場合の例を示します。このコードは、変数iが10になるまでループし、iが5になった時点でループを終了します。

let i = 0;
while (i < 10) {
    if (i === 5) {
        break;
    }
    console.log(i);
    i++;
}

この例でも、0から4までの数値がコンソールに出力され、iが5になった時点でループが終了します。

switch文での使用例

switch文内でbreak文を使用する例を示します。このコードは、変数colorの値に基づいて特定のメッセージを出力します。

let color = 'red';

switch (color) {
    case 'red':
        console.log('Stop');
        break;
    case 'yellow':
        console.log('Caution');
        break;
    case 'green':
        console.log('Go');
        break;
    default:
        console.log('Invalid color');
}

このコードでは、colorが’red’の場合に’Stop’がコンソールに出力され、その後のケースは評価されません。break文がないと、次のケースも実行されてしまいます。

以上の例から、break文がループやswitch文の制御にどのように役立つか理解できたと思います。次に、continue文について見ていきましょう。

continue文とは

continue文は、ループの現在の反復処理を中断し、次の反復処理に移るための制御文です。特定の条件が満たされた場合に、ループ内の残りのコードをスキップし、次の繰り返しを開始します。これにより、不要な処理を避け、効率的にループを実行できます。continue文は、forループ、whileループ、do…whileループで使用されます。次に、continue文の基本的な使用方法を具体的な例を通じて説明します。

continue文の使用例

基本的な使用例

以下は、forループ内でcontinue文を使用する例です。このコードは、0から10までの数値をループし、変数iが5のときにその反復をスキップします。

for (let i = 0; i < 10; i++) {
    if (i === 5) {
        continue;
    }
    console.log(i);
}

このコードを実行すると、0から4および6から9までの数値がコンソールに出力され、iが5のときだけスキップされます。

whileループでの使用例

whileループ内でcontinue文を使用する場合の例を示します。このコードは、変数iが10になるまでループし、iが5のときにその反復をスキップします。

let i = 0;
while (i < 10) {
    i++;
    if (i === 5) {
        continue;
    }
    console.log(i);
}

この例でも、1から4および6から10までの数値がコンソールに出力され、iが5のときだけスキップされます。

do…whileループでの使用例

do…whileループ内でcontinue文を使用する例を示します。このコードは、変数iが10になるまでループし、iが5のときにその反復をスキップします。

let i = 0;
do {
    i++;
    if (i === 5) {
        continue;
    }
    console.log(i);
} while (i < 10);

この例でも、1から4および6から10までの数値がコンソールに出力され、iが5のときだけスキップされます。

以上の例から、continue文が特定の条件でループの処理をスキップするのにどのように役立つか理解できたと思います。次に、break文とcontinue文の違いについて詳しく見ていきましょう。

break文とcontinue文の違い

役割の違い

break文とcontinue文はどちらもループ制御に用いられますが、その役割は異なります。

  • break文:ループやswitch文の実行を完全に終了します。指定された条件が満たされた時点で、ループの残りの反復やswitch文の残りのケースを実行せずに次の処理に進みます。
  • continue文:現在のループの反復を中断し、次の反復に進みます。指定された条件が満たされた時点で、その反復の残りのコードをスキップし、ループの次のサイクルを開始します。

使用シナリオの違い

これらの文を使用するシナリオも異なります。

  • break文の使用例
  • 早期終了が必要な場合
  • 特定の条件が満たされたときにループを完全に終了したい場合
  • continue文の使用例
  • 特定の条件が満たされたときにループの残りの処理をスキップし、次の反復に進みたい場合

break文の例

例えば、特定の値を見つけた時点でループを終了する場合:

for (let i = 0; i < 10; i++) {
    if (i === 5) {
        break;
    }
    console.log(i);
}

このコードは、iが5に達した時点でループを終了し、0から4までの値を出力します。

continue文の例

一方で、特定の条件に基づいてループの残りの処理をスキップする場合:

for (let i = 0; i < 10; i++) {
    if (i === 5) {
        continue;
    }
    console.log(i);
}

このコードは、iが5のときだけ処理をスキップし、0から4および6から9までの値を出力します。

これらの例を通じて、break文とcontinue文の使い分けが理解できたと思います。次に、ネストされたループでのbreak文の使用方法について詳しく説明します。

ネストされたループでのbreak文の使用

基本的な使い方

ネストされたループとは、ループの中に別のループが存在する構造のことを指します。この場合、break文は内側のループだけでなく、外側のループも終了することができます。通常のbreak文は最も内側のループのみを終了しますが、ラベル付きのbreak文を使用することで外側のループを終了させることができます。

通常のbreak文の例

以下のコードは、内側のループのみを終了する通常のbreak文の例です。

for (let i = 0; i < 5; i++) {
    for (let j = 0; j < 5; j++) {
        if (j === 3) {
            break;
        }
        console.log(`i = ${i}, j = ${j}`);
    }
}

このコードを実行すると、内側のループはjが3に達した時点で終了し、外側のループは継続されます。結果として、iが0から4の範囲で、jが0から2の範囲で出力されます。

ラベル付きbreak文の例

ラベル付きbreak文を使用することで、外側のループも終了させることができます。以下はその例です。

outerLoop: for (let i = 0; i < 5; i++) {
    for (let j = 0; j < 5; j++) {
        if (j === 3) {
            break outerLoop;
        }
        console.log(`i = ${i}, j = ${j}`);
    }
}

このコードを実行すると、jが3に達した時点で内側のループだけでなく、外側のループも終了します。結果として、i = 0, j = 0からi = 0, j = 2までの出力が得られます。

ネストされたループにおけるbreak文の使い方を理解することで、複雑なループ構造を効率的に制御することができます。次に、ネストされたループでのcontinue文の使用方法について詳しく説明します。

ネストされたループでのcontinue文の使用

基本的な使い方

ネストされたループにおけるcontinue文の使用は、内側のループの現在の反復をスキップし、次の反復に進むために使われます。外側のループには影響を与えませんが、ラベル付きのcontinue文を使用することで、特定のループの反復をスキップすることも可能です。

通常のcontinue文の例

以下のコードは、内側のループの反復をスキップする通常のcontinue文の例です。

for (let i = 0; i < 3; i++) {
    for (let j = 0; j < 5; j++) {
        if (j === 3) {
            continue;
        }
        console.log(`i = ${i}, j = ${j}`);
    }
}

このコードを実行すると、jが3のときにその反復がスキップされます。結果として、i = 0, j = 0からi = 2, j = 4までの範囲で、jが3のときを除くすべての組み合わせが出力されます。

ラベル付きcontinue文の例

ラベル付きcontinue文を使用することで、外側のループの次の反復に進むことができます。以下はその例です。

outerLoop: for (let i = 0; i < 3; i++) {
    for (let j = 0; j < 5; j++) {
        if (j === 3) {
            continue outerLoop;
        }
        console.log(`i = ${i}, j = ${j}`);
    }
}

このコードを実行すると、jが3のときに内側のループが終了し、外側のループの次の反復に進みます。結果として、i = 0, j = 0からi = 2, j = 2までの組み合わせと、i = 1, j = 0からi = 2, j = 2までの組み合わせが出力されます。

ネストされたループにおけるcontinue文の使い方を理解することで、特定の条件でループの処理をスキップし、効率的なループ制御を実現できます。次に、ラベル付きのbreak文とcontinue文について詳しく説明します。

ラベル付きbreak文とcontinue文

ラベル付きbreak文

ラベル付きbreak文は、ネストされたループやブロックの中で特定の外側のループやブロックを終了するために使用されます。ラベルを使うことで、通常のbreak文では終了できない範囲のループを終了することが可能です。

ラベル付きbreak文の例

以下のコードは、ラベル付きbreak文を使用して外側のループを終了する例です。

outerLoop: for (let i = 0; i < 5; i++) {
    for (let j = 0; j < 5; j++) {
        if (j === 3) {
            break outerLoop;
        }
        console.log(`i = ${i}, j = ${j}`);
    }
}

このコードを実行すると、jが3に達した時点で内側のループと外側のループの両方が終了します。結果として、i = 0, j = 0からi = 0, j = 2までの出力が得られます。

ラベル付きcontinue文

ラベル付きcontinue文は、ネストされたループやブロックの中で特定の外側のループの次の反復に進むために使用されます。通常のcontinue文ではスキップできない範囲のループをスキップすることが可能です。

ラベル付きcontinue文の例

以下のコードは、ラベル付きcontinue文を使用して外側のループの次の反復に進む例です。

outerLoop: for (let i = 0; i < 3; i++) {
    for (let j = 0; j < 5; j++) {
        if (j === 3) {
            continue outerLoop;
        }
        console.log(`i = ${i}, j = ${j}`);
    }
}

このコードを実行すると、jが3に達した時点で内側のループの残りの反復がスキップされ、外側のループの次の反復に進みます。結果として、i = 0, j = 0からi = 2, j = 2までの組み合わせが出力され、jが3のときの反復はスキップされます。

ラベル付きbreak文とcontinue文を使用することで、複雑なループ構造をより柔軟に制御することができます。次に、実践的な応用例を通じてこれらの制御文の効果的な使用方法を紹介します。

実践的な応用例

検索アルゴリズムでのbreak文の使用例

以下は、配列内の特定の要素を検索し、見つけた時点でループを終了する例です。この場合、break文を使用して効率的に検索を行います。

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let target = 5;
let found = false;

for (let i = 0; i < numbers.length; i++) {
    if (numbers[i] === target) {
        found = true;
        console.log(`Target ${target} found at index ${i}`);
        break;
    }
}

if (!found) {
    console.log(`Target ${target} not found`);
}

このコードは、配列numbers内でtargetが見つかった時点でループを終了し、見つけた位置を出力します。

フィルタリング処理でのcontinue文の使用例

以下は、配列内の偶数のみをコンソールに出力する例です。この場合、continue文を使用して奇数の要素をスキップします。

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];

for (let i = 0; i < numbers.length; i++) {
    if (numbers[i] % 2 !== 0) {
        continue;
    }
    console.log(`Even number: ${numbers[i]}`);
}

このコードは、配列numbers内の奇数の要素をスキップし、偶数のみを出力します。

ネストされたループでのラベル付きbreak文の実践例

以下は、二次元配列内の特定の値を検索し、見つけた時点で全てのループを終了する例です。この場合、ラベル付きbreak文を使用します。

let matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
];
let target = 5;
let found = false;

outerLoop: for (let i = 0; i < matrix.length; i++) {
    for (let j = 0; j < matrix[i].length; j++) {
        if (matrix[i][j] === target) {
            found = true;
            console.log(`Target ${target} found at row ${i}, column ${j}`);
            break outerLoop;
        }
    }
}

if (!found) {
    console.log(`Target ${target} not found`);
}

このコードは、二次元配列matrix内でtargetが見つかった時点で、内側および外側のループを両方とも終了し、見つけた位置を出力します。

データ処理でのラベル付きcontinue文の実践例

以下は、二次元配列内の負の値をスキップし、正の値のみを処理する例です。この場合、ラベル付きcontinue文を使用します。

let matrix = [
    [1, -2, 3],
    [4, -5, 6],
    [-7, 8, 9]
];

outerLoop: for (let i = 0; i < matrix.length; i++) {
    for (let j = 0; j < matrix[i].length; j++) {
        if (matrix[i][j] < 0) {
            continue outerLoop;
        }
        console.log(`Processing value: ${matrix[i][j]}`);
    }
}

このコードは、二次元配列matrix内の負の値が見つかった時点で、現在の行の残りの処理をスキップし、次の行に進みます。

これらの応用例を通じて、break文とcontinue文が実際のプログラムでどのように役立つかを理解できたと思います。次に、学習内容の定着を図るための演習問題を提供します。

演習問題

問題1: break文を使ったループの早期終了

次の配列numbersの中から最初に見つけた5の倍数をコンソールに出力し、ループを終了するコードを書いてください。

let numbers = [3, 7, 12, 19, 24, 30, 41, 55];
// コードをここに書いてください

問題2: continue文を使った特定の値のスキップ

次の配列numbersの中から3の倍数をスキップし、それ以外の値をコンソールに出力するコードを書いてください。

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// コードをここに書いてください

問題3: ネストされたループとラベル付きbreak文

次の二次元配列matrixの中から特定の値targetを検索し、見つけた場合にはその位置をコンソールに出力し、すべてのループを終了するコードを書いてください。

let matrix = [
    [10, 20, 30],
    [40, 50, 60],
    [70, 80, 90]
];
let target = 50;
// コードをここに書いてください

問題4: ネストされたループとラベル付きcontinue文

次の二次元配列matrixの中から負の値が見つかった場合、その行の処理をスキップし、正の値のみをコンソールに出力するコードを書いてください。

let matrix = [
    [5, -1, 7],
    [2, 3, 4],
    [-5, 6, 8]
];
// コードをここに書いてください

問題の解答

問題に取り組んだ後、以下の解答を確認して理解を深めてください。

// 問題1の解答
for (let i = 0; i < numbers.length; i++) {
    if (numbers[i] % 5 === 0) {
        console.log(numbers[i]);
        break;
    }
}

// 問題2の解答
for (let i = 0; i < numbers.length; i++) {
    if (numbers[i] % 3 === 0) {
        continue;
    }
    console.log(numbers[i]);
}

// 問題3の解答
outerLoop: for (let i = 0; i < matrix.length; i++) {
    for (let j = 0; j < matrix[i].length; j++) {
        if (matrix[i][j] === target) {
            console.log(`Target ${target} found at row ${i}, column ${j}`);
            break outerLoop;
        }
    }
}

// 問題4の解答
outerLoop: for (let i = 0; i < matrix.length; i++) {
    for (let j = 0; j < matrix[i].length; j++) {
        if (matrix[i][j] < 0) {
            continue outerLoop;
        }
        console.log(matrix[i][j]);
    }
}

演習問題に取り組むことで、break文とcontinue文の使用方法をさらに理解し、実践的なスキルを身につけることができます。次に、本記事の内容をまとめます。

まとめ

本記事では、JavaScriptにおけるbreak文とcontinue文の基本的な使い方から、具体的な使用例、ネストされたループやラベル付きの応用例までを詳しく解説しました。break文はループやswitch文を途中で終了させ、continue文はループの現在の反復をスキップして次の反復に進みます。これらの制御文を効果的に使うことで、コードの効率と可読性を向上させることができます。

さらに、実践的な応用例や演習問題を通じて、break文とcontinue文の理解を深め、実際のプログラムでの応用力を高めることができました。これらの知識を活用して、より複雑なループ処理や条件分岐を効率的に実装していきましょう。

コメント

コメントする

目次