javascript(jQuery)で始めるプログラム基礎 4

前回は、条件分岐について解説しました。
その中でもif文を中心に解説していきました。
今回は、繰り返し処理の解説です。
以前の記事で、プログラムは4つの事しかしていないと書きました。

1.入力
2.出力
3.分岐
4.繰り返し

今回解説するのは、この最後に書かれている繰り返しです。
定められた事を、指定された回数繰り返します。

同じ様な処理を、何度も行うのではなく、繰り返し処理をする事で、少ない記述で大量の処理を行う事が可能です。


1.for文で繰り返し

繰り返し処理は、for文が有名です。
基本的な文法は、以下の通りです。

for(カウンターを定義 ; 繰り返す条件 ; カウンターの処理){
処理
}

for文は繰り返す回数を上手くコントロールしなくてはなりません。
「カウンターを定義」、「繰り返す条件」、「カウンターの処理」の三つで繰り返す回数を調整します。

ひとまず、以下の様なコードを書いてみます。

var count = 0;
for(count; count<3; count++){
console.log("繰り返し");
}

コンソールの画面に、文字が3回表示されるはずです。
ただ、「繰り返し」という同じ文字を3回出力しているので、以下の画像の様に表示されます。3行「繰り返し」という文字が出る訳でありません。



では、なぜ3回表示されるかを解説していきます。
for文に限らず、プログラムは、一瞬で処理されてしまうので、なぜ動いているかを把握するのが難しいです。
そこで、なるべくイメージがしやすい様に、処理される順番に解説していきます。

(1)まず最初の行で、変数countに対して、数値の0を代入しています。そして、その変数をfor文で使うカウンターにしています。



(2)次に「繰り返す条件」を調べます。今は、変数countに0が代入されています。よって、
「count < 3」は成り立つ事がわかります。


(3)(2)で、繰り返す条件がtrueだったので、{}の中の処理を実行します。ここで、1回めの出力が発生しています。


(4)処理が終わったら、カウンターの処理を行います。「++」は初めて出てきましたが、「インクリメント」と言って、「1を足す」という意味です。
つまり、変数countに1を足しています。
この時点で、最初は0が代入されていた変数countには、1が入っています。


(5)繰り返す条件を再度チェックします。今の時点でcountには1が入っています。よって、「count < 3」は成り立ちます。


(6)条件が成り立つ(true)ので、処理を実行します。ここで、2回めの出力が実行されています。


(7)また、countに1を足します。この時点で変数countには2が代入されています。

(8)繰り返す条件を確認します。今の時点で、変数countには2が代入されています。よって「count < 3」は、成り立ちます。


(9)繰り返す条件が成り立ったので、処理を実行します。ここで3回めの出力をしています。


(10).countに1を足します。この時点で、countは3になっています。


(11)繰り返す条件を確認します。今回はcountは3になっています。よって、「contt < 3」は、成り立ちません。(false)


(12)一つ前の処理で、繰り返す条件が成り立たなかったので、処理はせずにfor文の処理を終えます。


この様に、3回出力するfor文ですが、12工程がものすごいスピードで実行される事で動いています。

2.一般的なfor文の書き方

前の例では、繰り返す回数をコントロールするために、変数countを使いました。
文法上、まったく問題ないのですが、慣習は少し違います。
前の例と全く同じ動きをするfor文を、もう少し慣習に寄せた形で書いてみます。

for(var i = 0; i<3; i++){
console.log("繰り返し");
}

この様に、カウンター用の変数は、iを使う事が多いです。そして、for文の中で定義しつつ0を代入する事が多いです。
この変数名にする理由は、特になく、単なる慣習です。

3.配列の中身を出力

繰り返し処理は、配列と相性が良いです。
配列の中にあるデータを全て出力します。
配列の出力方法は、以下のURLより参照してください。

https://otsutome.blogspot.com/2019/10/javascriptjquery-2.html


//配列を定義
var hairetu = ["鈴木さん","田中さん","佐藤さん"];

for(var i = 0; i<3; i++){
//配列を出力
}

さて、ここで、どうやって配列を出力すれば良いかを考えます。
以下の様に書いてみると、配列全体が3回出力されてしまいます。

for(var i = 0; i<3; i++){
console.log(hairetu);
}
/*
->「array(3)」、もしくは、「(3) ["鈴木さん", "田中さん", "佐藤さん"]」が3回出力される。
*/

これだと、やりたい事とは少し違います。配列全体を出力するのではなく、中身を出したいです。
なので、console.log(hairetu[数字]);この様な形で出力する必要があります。
では、以下の様にしてみます。

for(var i = 0; i<3; i++){
console.log(hairetu[0]);
}
//->鈴木さんが3回表示される

今度は、配列の中の一つのデータを取り出す事が出来ましたが、3回とも鈴木さんだけが表示される様になりました。

今回求められるのは、繰り返し処理の1回ごとに、処理の内容を変えるという事です。

1回目は、
console.log(hairetu[0]);

2回目は、
console.log(hairetu[1]);

3回目は、
console.log(hairetu[2]);

この様に、出力する内容を変える必要があります。
では、どうしたら出来るでしょうか。

こういった処理を行うときは、カウンターとしてセットした、変数iを使うのが一般的です。
変数iは、「1.for文で繰り返し」で、処理の流れを一つ一つ書きましたが、繰り返し処理が実行される毎に、1足されていきます。
よって、以下の様に記述します。

for(var i = 0; i<3; i++){
console.log(hairetu[i]);
}
//>鈴木さん、田中さん、佐藤さんが順番に出力される

このコードの場合、
1回目は、
console.log(hairetu[i]);
//iは、0が代入されている

2回目は、
console.log(hairetu[i]);
//iは、1が代入されている

3回目は、
console.log(hairetu[i]);
//iは、2が代入されている。

こういう状態になり、配列の中にあるデータを順番に取り出す事が出来ます。

また、「i<3」の部分ですが、「3」の意味は配列の中にあるデータの個数です。
よってここは、配列のデータの数を出力できる、lengthを使うと便利です。

for(var i = 0; i<hairetu.length; i++){
console.log(hairetu[i]);
}

こうすると、後で配列の中身が増えたとしても、変わらずに全て出力されます。

4.まとめ

繰り返し処理は、わずかなコードで、大量の処理を行うので、初学者の方は何が起こっているのかわからなくなりがちです。
ゆっくり考えつつコードを書く様にしていきましょう。
for文は、if文同様よく使う処理ですので、何度も書いて覚えていきましょう。