6時だョ!!全員集合!!

Rails・JavaScrictを中心にアウトプットします。

2021年10月30日 JavaScript (JS Primer) ループと反復処理

while文とdo-while文の違い

while文とdo-while文の大きな違いは、処理の実行タイミングです。while文では条件式を評価した後で処理を実行します。一方、do-while文の場合、処理を実行してから条件式を評価します。

無限ループになる理由

無限ループになる理由は大きく2つあります。

  • 条件式の記述を間違えた。
let i = 1;
// 条件式が常にtrueになるため、無限ループする
while (i > 0) {
    console.log(`${i}回目のループ`);
    i += 1;
}
  • 実行する文の中で条件式がfalseとなるような処理を書いてない。
let i = 1;
// 条件式が常にtrueになるため、無限ループする
while (i < 10) {
    console.log(`${i}回目のループ`);
}

ここまでのまとめ〜do_while文

  • do while文の処理は1回は実行され、その後でwhileの条件式が実行されます。
  • do whileの条件式がfalseの場合は処理が行われません。trueだとfalseになるまで処理が行われます。
  • while文は無限ループなるリスクが大きいこともあり非推奨とされています。

    for文

for文は繰り返す範囲を指定した反復処理を書くことができます。

for (初期化式; 条件式; 増分式) {
    実行する文;
}

for文の実行の流れは次のようになります。

  • 初期化式 で変数の宣言
  • 条件式 の評価結果がtrueなら次のステップへ、falseなら終了
  • 実行する文 を実行
  • 増分式 で変数を更新
  • ステップ2へ戻る

関数宣言で応用すると以下のようになります。

function sum(numbers) {
    let total = 0;
    for (let i = 0; i < numbers.length; i++) { 
        total += numbers[i];
    }
    return total;
}

console.log(sum([1, 2, 3, 4, 5])); // => 15
  • [配列].lengthは配列の要素数を数値として取り出します。
  • ここではi < numbers.length は、0 < 5 となります。
  • trueの場合ブロック内の処理が実行されます。
  • numbers[i]でiの数値に対応するインデックス番号の値を既存のtotalと足した上でtotalに代入します。
  • i++でiに1を足した上でi < numbers.lengthの条件式が実行され、ブロックの処理が実行され、最終的にiの値が4になった時にtotalが15になります。
  • iが5の場合は条件式がfalseになるため、ブロック内の処理は実行されずにreturn total;に処理が移行しtotalの値が返されます。

参考

JavaScript Primerループと反復処理