さらにややこしい話になるが、このあたりがプログラミングの醍醐味なので、なんとかがんばる
プログラム言語は、いかに人間の労力を減らすかを考えて作られている・・・と思う。たとえば、前に出てきた以下のプログラム
line(0,0,99,0); line(0,10,99,10); line(0,20,99,20); line(0,30,99,30); line(0,40,99,40); line(0,50,99,50); line(0,60,99,60); line(0,70,99,70); line(0,80,99,80); line(0,90,99,90);
これを書くのはめんどくさい。しかし、これは同じ長さの線を縦の位置だけを変えながら描いているので、各行には共通点がおおく、よく見るとこのプログラムの各行は
line(0, 10の何倍か, 99, 10の何倍か);
という同じ形をしていて、それを繰り返していることに気づく。そのような繰り返しのプログラムを効率よく書くために、「ループ」と呼ばれる仕組みが用意されている。そのための命令 for
を使うと、同じ内容は以下のように書ける。
int i; for(i=0; i<=90; i += 10){ line(0,i,99,i); }
かなり簡単になった。10回繰り返すくらいなら、line
を10回書いてもたいした手間ではないかもしれないが、100回書けと言われたらさすがにいちいち書いていてはやってられないだろう。それが、for
を使うと非常に簡単に書ける
size(500,500); int i; for(i=0; i<490; i += 5){ line(0,i,499,i); }
以下では、for
が何をしているか、考えてみる。このあたりはプログラムを眺めて理解できればよい。
「10の何倍か」をとりあえず整数変数 i で表して
line(0,i,99,i);
と書いてみる。これを使って馬鹿正直にプログラムを書くと
int i; i=0; line(0,i,99,i); i=10; line(0,i,99,i); i=20; line(0,i,99,i); i=30; line(0,i,99,i); i=40; line(0,i,99,i); i=50; line(0,i,99,i); i=60; line(0,i,99,i); i=70; line(0,i,99,i); i=80; line(0,i,99,i); i=90; line(0,i,99,i);
となって、これじゃ元のプログラムより長くて意味ないじゃんということになるのだが、このプログラムとまったく同じ内容が
int i; i=0; line(0,i,99,i); i += 10; line(0,i,99,i); i += 10; line(0,i,99,i); i += 10; line(0,i,99,i); i += 10; line(0,i,99,i); i += 10; line(0,i,99,i); i += 10; line(0,i,99,i); i += 10; line(0,i,99,i); i += 10; line(0,i,99,i); i += 10; line(0,i,99,i);
と書けることに注意しよう。i += 10
によって i が10ずつ増えるので、内容は上と同じだが、このプログラムは
i += 10; line(0,i,99,i);
という二行の繰り返しになっている。ということは、「以下の部分を繰り返しなさい」という命令があれば、これは
int i; i=0; line(0,i,99,i); あとは以下の二行を8回繰り返す i += 10; line(0,i,99,i);
でいいはずだ。そして、その命令が for
というわけだ。
int i; for(i=0; i<=90; i += 10){ line(0,i,99,i); }
このプログラムの意味は正しくは
int i; 最初はiを0とし、その後、iを10ずつ増やしながら、iが90になるまで以下の行を繰り返す line(0,i,99,i);
である。つまり、元のプログラムの最初にあった i=0
の部分までが for
で表現されている。for
の中には三つの内容をセミコロンで区切って書く。
繰り返しの命令。
A:最初の設定
B:繰り返しを行なう条件
C:毎回行なう計算
D:繰り返したい命令
今の例ではBの条件が i<=90
となっている。これは「iが90以下の間繰り返す」という意味を表す。条件は普通、不等号で表す
小さい
以下(小さいか等しい)
大きい
以上(大きいか等しい)
等しい
最後の「等しい」はループでは使わないと思う。
ところで、繰り返したい命令Dは複数の命令でもよい。たとえば、以下のプログラムは、縦横の線を繰り返し描いて、格子を作る
int i; for(i=0; i<=90; i += 10){ line(0,i,99,i); line(i,0,i,99); }
正方形を並べるプログラムや円を並べるプログラムをいろいろ作ってみる。色も数値で表されるのだから、ループで少しずつ変えることができる。たとえば、以下のような絵を描いてみよ。