Day 2・条件と くり返し — プログラムに判断させる
くり返し — 配列を1件ずつ処理する
for...of と forEach で配列を1件ずつ処理する。なぜ人間が手で並べず「くり返し」を使うのかを理解する。
同じことを何度も — 人間が手で書かない理由
配列の中身をすべて表示したいとき、fruits[0]、fruits[1]…と1行ずつ書くこともできます。でも100件あったら100行です。しかも件数が変わると全部書き直しになります。そこで「同じ処理を、中身ぶんだけ自動でくり返す」のがループ(くり返し)です。宛名書きを1枚ずつ手書きするか、同じ作業をコピー機に任せるか、の違いです。
手で1件ずつ書く
const fruits = ["りんご", "みかん", "ぶどう"];
console.log(fruits[0]);
console.log(fruits[1]);
console.log(fruits[2]);
// 件数が変わると全部書き直しループで自動でくり返す
const fruits = ["りんご", "みかん", "ぶどう"];
for (const fruit of fruits) {
console.log(fruit);
}
// 件数が変わってもこのままでOKfor...of — 配列を1件ずつ取り出す
for...of は「配列の中身を1件ずつ取り出して、順番に処理する」書き方です。for (const 変数 of 配列) と書くと、変数に先頭から1つずつ値が入り、{ } の中がその回ごとに実行されます。読むときは「配列の の中身 of を1件ずつ fruit に入れて回す」と考えます。
const fruits = ["りんご", "みかん", "ぶどう"];
for (const fruit of fruits) {
console.log("くだもの: " + fruit);
}
// くだもの: りんご
// くだもの: みかん
// くだもの: ぶどうconsole.log で「今どれを処理中か」を確認する
ループが思ったとおり動いているか不安なときは、くり返しの中で console.log を使い、いま変数に何が入っているかを毎回表示すると確かめられます。値が1件ずつ変わって出力されれば、ちゃんと全件を回れている証拠です。バグを直すときも、まずここで中身を見るのが基本です。
forEach — 配列に「これを全部にやって」と頼む
forEach は配列自身に「各要素に対してこの処理をして」と頼む書き方です。配列.forEach((要素) => { 処理 }) と書くと、for...of と同じように1件ずつ処理できます。(要素) => { } の部分は「1件ごとに実行してほしい処理」で、Day1で学んだ関数の一種です。
const fruits = ["りんご", "みかん", "ぶどう"];
fruits.forEach((fruit) => {
console.log("くだもの: " + fruit);
});
// for...of と同じ結果になるfor...of と forEach は、どちらも「配列を1件ずつ処理する」ための道具です。読めればどちらでも構いません。まずは「配列を頭から順に全部回している」と読み取れることが大切です。
なぜ2つの書き方があるのか
for...of は途中で止めたり(break)、条件で飛ばしたりしやすく、素直に読めます。forEach は「各要素にこの処理」を短く書け、次のDayで学ぶ map など、値を作りかえる仲間とセットで覚えると便利です。今は違いを暗記するより、両方とも『全件を1件ずつ処理している』と読めれば十分です。
AIにはこう聞く
「この配列を1件ずつ表示するループを書いて」と頼めば、for...of か forEach でコードを提案してくれます。あなたは、それが本当に全件を回っているか(先頭から最後まで漏れなく処理しているか)を読んで確かめます。次のDayでは、この「1件ずつ処理する」考え方をもとに、配列を別の配列に作りかえる map を学びます。まずは「くり返しで全件を回す」感覚をここでつかんでおきましょう。
- ループは「同じ処理を中身ぶんだけ自動でくり返す」道具。手書きの繰り返しをなくす
- for...of は for (const 変数 of 配列) で1件ずつ取り出す
- forEach は 配列.forEach((要素) => { 処理 }) で1件ずつ処理する
- くり返しの中で console.log すると、今どの値を処理中か確認できる
- どちらも「全件を1件ずつ処理する」ための道具。次のDayの map につながる
読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。
理解度チェック
答えられれば、面接で説明できる状態に一歩近づきます。
const nums = [10, 20, 30]; に対して for (const n of nums) { console.log(n); } を実行すると、どうなりますか。
配列 items を1件ずつ処理する書き方として正しいものはどれですか。
配列の全要素に同じ処理をするとき、fruits[0]、fruits[1]… と手で書かずにループを使うのは、なぜですか。
記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。