diff --git a/source/basic/loop/README.md b/source/basic/loop/README.md index 7d1d9ad2ca..5b72a235a0 100644 --- a/source/basic/loop/README.md +++ b/source/basic/loop/README.md @@ -5,14 +5,76 @@ author: azu # ループと反復処理 -プログラミングにおいて、同じ処理を繰り返すために同じコードを書くことはありません。 -ループや再帰呼び出し、イテレータなどを使い反復処理は抽象化されます。 +プログラミングにおいて、同じ処理を繰り返すために同じコードを必要はありません。 +ループや再帰呼び出し、イテレータなどを使い、反復処理は抽象化します。 ここでは、もっとも基本的な反復処理となるループについてを学んでいきます。 +## while文 + +while文は`条件式`が`true`であるならば、反復処理を行います。 + +```js +while (条件式) + 実行する文; +``` + +while文の実行フローは次のようになります。 +最初から`条件式`が`false`である場合は、何も実行せずwhile文は終了します。 + +1. `条件式` の評価結果が`true`なら処理を続け、`false`なら終了 +2. `実行する文`を実行 +3. ステップ1へ戻る + +次のコードでは`x`の値が10未満であるなら、コンソールへ繰り返しログが出力されます。 +また、`実行する文`にて、`x`の値を増やし`条件式`が`false`となるようにしています。 + +```js +var x = 0; +while (x < 10) { + console.log(x); + x += 1; +} +``` + +つまり、`実行する文`の中で`条件式`が`false`となるような処理を書かないと無限ループします。 +JavaScriptにはより安全な反復処理の書き方があるため、while文は使う場面が限られています。 + +安易にwhile文を使うよりも、他の書き方で解決できないかを考えてからでも遅くはないでしょう。 + +## do-while文 + +do-while文はwhile文と殆ど同じですが実行順序が異なります。 + +```js +do { + 実行する文; +} while (条件式); +``` + +do-while文の実行フローは次のようになります。 + +1. `実行する文`を実行 +2. `条件式` の評価結果が`true`なら処理を続け、`false`なら終了 +3. ステップ1へ戻る + +while文とは異なり、かならず最初に`実行する文`を処理します。 + +そのため、次のコードのように最初から`条件式`を満たさない場合でも、 +初回の`実行する文`が処理され、コンソールへ`1000`と出力されます。 + +```js +var x = 1000; +do { + console.log(x);// => 1000 +} while (x < 10); +``` + +この仕組みを上手く利用し、ループの開始前とループ中の処理をまとめて書くことができます。 +しかし、while文と同じく他の書き方で解決できないかを考えてからでも遅くはないでしょう。 + ## for文 -for文はもっとも基本的な反復処理です。 -JavaScriptのfor文はC言語やJavaと同様の構文になります。 +for文は繰り返す範囲を指定した反復処理を書くことができます。 ```js for (初期化式; 条件式; 増分式) @@ -26,7 +88,7 @@ for文の実行フローは次のようになります。 3. `実行する文` を実行 - 複数行である場合は、`{`と`}`で囲んだブロック文にする必要があります 4. `増分式` で変数を更新 -5. ステップ2へ戻り繰り返す +5. ステップ2へ戻る 次のコードでは、for文を使い1から10の合計値を計算しています。