例えば、ある文を複数回実行したい場合があるとします。もし「こんにちは」と記述されているメッセージボックスを 2 回連続で実行したい場合には、次のようにプログラムを書く必要があります。
procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage('こんにちは'); ShowMessage('こんにちは'); end;
2 回ぐらいなら、まだいいですけど、例えば 20 回実行したいときはどうでしょうか? ShowMessage('こんにちは'); を 20 回も入力しなくてはいけませんし、プログラムを読む方にとっても、20 回も同じ文があれば、「一体、ShowMessage は、全部で何回実行されているんだ?」と、余計なことを考える必要も出てきます。初めから何回繰り返すのかが分かっている場合には、これから紹介します for 文を使用することが出来ます。
for 文では、ある特定の文を繰り返し実行したいときに使用します。文を繰り返し実行するということは、どの文を、何回繰り返し実行するのかという情報が必要になってきますね。つまり、繰り返す「回数」が必要になってきます。まず簡単なサンプルとして、ボタンを押すと「こんにちは」とメッセージボックスを 4 回表示する例を見てみましょう。
procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i := 0 to 3 do begin ShowMessage('こんにちは'); end; end;
注目していただきたい事は、どの文を、何回実行するかという点です。上のサンプルをみると、「どの文を」に相当する箇所は、すぐ分かりますが(ShowMessage('こんにちは') の部分がそうですね)問題は、「何回繰り返されるのか」という点です。それについての情報は以下のコードで、表現されています。
for i := 0 to 3 do
for 文では、その回数を指定する際に「何回」ということではなく、回数の「初期値」と「終値」を指定しているのが特徴です。つまり、上の例では「 0 から 3 まで」ということになります。
「 0 から 3 まで」とは「 0, 1, 2, 3 」までのことだと思ってください。つまり 0 から 1 ずつ値を増加していって 3 までで終了ということです。これは for 文での決まりごとです。また、変数 i の部分ですが、これは「今まで何回、繰り返したか」という情報を保持するものだと思ってください。文を繰り返し実行している途中で、ある特別な操作をしたい場合には、「現在、何回目を実行中か」を知る必要があります。その際に使用することが出来ます。
以上の説明を図で表したのが、下図です。
図で示したように、for 文自体で使用される変数(ここでは i )は、その for 文で実行されるべき文が全て実行されたあと、自動的にその値を +1 増加させます。そのことは以下のプログラムで確かめる事が出来ます。
procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i := 0 to 2 do begin ShowMessage(' i の値は ' + IntToStr(i) + 'です'); end; end;
ですから、もしループ回数を知る必要があるなら for 文で使用している変数 i を使えばいいですね。次のサンプルでは、ループ終了の際にそれを知らせるメッセージボックスを表示するプログラムです。
procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i := 0 to 2 do begin ShowMessage('こんにちは'); if i = 2 then ShowMessage('ループを終了します'); end; end;
上記のサンプルのように、for 文では何回繰り返すのかを指定していますので、ループ終了時に、何か特別な処理をすることも出来ますし、ループの途中でも、特定の処理をすることだって出来ます。つまり for 文では、ループする回数に注目している命令だということが分かります。
ループ処理で使用される命令には for 文の他に while 文があります。for 文では「ループ回数」に注目した命令ですが、while 文では「ループの終了」に注目した命令です。つまり、「いつループを終了するか」という点に重点が置かれています。例えば Number という変数を宣言して、ループするたびにその値を 3 ずつ増やしていき Number の値が 100 を超えた時点でループ終了する場合には、この while 文を使用することが出来ます。
procedure TForm1.Button1Click(Sender: TObject); var Number: Integer; begin Number := 0; // 初期値を代入します while Number < 100 do begin Number := Number + 3; // 3 ずつ値を増やしていきます end; ShowMessage('Number の値は' + IntToStr(Number)); end;
while 文を使用する際に注目すべきポイントは、以下のコードにあります。
while Number < 100 do
while では、ループ終了の判断を Number < 100の部分で行っています。もし、Number が 100 未満であるならループを継続し、100 を超えていた場合は、ループを終了します。つまり、ある評価対象物において、True ならループ継続、False ならループ終了ということになります。例えば Number が 20 であるなら Number < 100 は True ですね。ですからループは継続されます。また Number が 150 であるなら False になりますのでループは終了します。
while 文が行う様子を図で表したのが、下図です。
もちろん while 文でもループ回数を知る事ができます。しかしループ回数を知りたい場合には、それ専用の変数を新たに用意する必要があります。以下のサンプルでは、変数 LoopCount を宣言して、ループ回数を調べています。
procedure TForm1.Button1Click(Sender: TObject); var Number: Integer; LoopCount: Integer; begin Number := 0; // 初期値を代入します LoopCount := 0; while Number < 100 do begin Number := Number + 3; // 3 ずつ値を増やしていきます LoopCount := LoopCount + 1; end; ShowMessage('Number の値は' + IntToStr(Number)); ShowMessage(IntToStr(LoopCount) + '回ループしました'); end;
ちょっと一言:
Delphi では、大文字と小文字を区別しません。
ですから、プログラムコードで IntToStr は、inttostr と書いてもいいし、INTTOSTR と書いても エラーとなりません。