サンプル・プログラム
1から10までの和
add10.html
9: <script>
10: document.write(1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10);
11: </script>
$$ 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 $$
の計算結果を表示するプログラムである。
数式をそのままプログラムにしただけだが、目的とする計算結果を正しく表示するから、このプログラムは正しい。
しかし、1から100までの整数の和を計算しようとすると、1行がとても長くなってしまう。1行があまりにも長いと、計算結果が間違っていたときに不具合箇所(バグ)を探すのに時間がかかる。
add11.html
9: <script>
10: let n = 0;
11: n = n + 1;
12: n = n + 2;
13: n = n + 3;
14: n = n + 4;
15: n = n + 5;
16: n = n + 6;
17: n = n + 7;
18: n = n + 8;
19: n = n + 9;
20: n = n + 10;
21: document.write(n);
22: </script>
こうすればバグは見つけやすくなるが、1から100までの整数の和を計算しようとすると、足し算が100行になってしまう。それならば、わざわざプログラムを書かずに ExcelやGoogleスプレッドシートでSUM関数を使って計算した方が手っ取り早いだろう。
forループ
for1.html
9: <script>
10: let n = 0;
11: for (let i = 1; i <= 10; i = i + 1) {
12: n = n + i;
13: }
14: document.write(n);
15: </script>
"for1.html" は、繰り返し処理の一種である forループを使って1から10までの整数の和を計算するプログラムである。
"add11.html" で10行書いた足し算が $ n = n + i $ の1行にまとまっている。変数 i の値を1から10まで1ずつ増やしながら、その時点までの合計値を変数 n に代入していくのが forループの役割である。
forループは、次のような書式で記述する。
for (初期値; 繰り返し条件; 繰り返し計算式) {
処理1;
処理2;
‥‥
}
forループの動きは、初期値、繰り返し条件、繰り返し計算式の3つで定める。
ここでは、初期値は $ i = 1 $、繰り返し条件は $ i \leqq 10 $(iが10以下。不等号は "<=" と記すことに注意)、繰り返し計算式は $ i = i + 1 $ で、1回繰り返すごとにこの計算を実行する。
1から100までの整数の和を計算したいなら、繰り返し条件を $ i \leqq 100 $ に変えるだけで対応できる。
足す数である変数 i は、繰り返し処理の外で使うことはないので、let宣言で十分である。
このように forループを使えば、プログラムがシンプルになりバグが発見しやすくなると同時に、似たような計算問題に対してプログラムを若干変更するだけで対応できる(再利用しやすい)。ExcelやGoogleスプレッドシートの関数よりプログラムが便利になるのは、繰り返し処理をはじめとする制御を使うときである。
コメント
for2.html
9: <script>
10: //変数宣言
11: let a = 1; //開始値
12: let b = 10; //終了値
13: let n = 0; //合計値
14:
15: //aからbまでの整数の合計を求める
16: for (let i = a; i <= b; i++) {
17: n = n + i;
18: }
19: //結果を表示する
20: document.write(n);
21: </script>
あわせて、足し算の開始値を変数 a、終了値を変数 b に入れるようにした。こうしておくと、1から100までの和を求めたくなったときも、 $ b = 100 $ と書き換えるだけで済む。
JavaScript では // から行末までをコメントとして読み飛ばす。コメントには、日本語はもちろん、UNICODE絵文字を書くこともできる。
また、/* ... */ を使うと複数行のコメントを書くことができる。
/∗ここで、forループの繰り返し計算式 $ i = i + 1 $ が $ i++ $ になったことに注目してほしい。後者をインクリメント演算子と呼び、ここでのように単独で書いたときの効果は $ i = i + 1 $ と同じだ。
複数行の
コメント
∗/
前に述べたとおり、プログラムを可読性が損なわれない範囲で短く書くことは、バグの発見しやすさにつながる。そのために用意されている演算子である。
コラム:無限ループ
また、i のような繰り返し用の変数に小数を使うと、正しく終了しないことがある。コンピュータは数値を2進数で扱うため、0.1 や 0.6 のように2進数では割りきれない小数(循環小数)は、わずかな誤差を含んだ近似値になるからだ。(「有限小数、循環小数、分数、無理数」参照)
オブジェクトを生成するようなループ処理が正常に終わらないと、メモリを使い果たしてアプリケーションが応答しなくなったり、強制終了させられたりすることがある。仕事でプログラムを作っている皆さんは、無限ループに陥らないよう、繰り返し回数の上限を決めて強制的に抜け出す仕組みをあらかじめ組み込んでおこう。

天才数学者カール・フリードリヒ・ガウスは7歳の時、1から100までの和を、両端から順に組にして足すという方法でたちまち解いてみせたという。同じ考え方を使えば、1から10までの和は $ \displaystyle \frac{10 \times(1 + 10)}{2} $ で求められる。
しかし、私たちは凡人である――地道に1から10までを順に足し算していくことにする。ただ、プログラムには繰り返し処理という仕組みが用意されており、このような地道な繰り返し処理を簡単に書くことができる。