文を繰り返し実行したい場合には for 文、while 文の他に repeat 文 を使用することが出来きます。
repeat 文は、どちらかというと while 文に似ていますが、 その違いは繰り返す条件の判定を最後に行うことと、 その判定が True の場合にループを終了することです。
ループするかしないかの判定を最後に行いますので、 repeat 文に記述された文は、少なくとも必ず 1 回は 実行される事になります。
repeat 文は、以下のようなコードで表現されます。
repeat ....... ....... ....... until 条件; // 条件が真の時、ループを終了
簡単な例を見てみましょう。
procedure TForm1.Button1Click(Sender: TObject); var Number: Integer; LoopCount: Integer; begin Number := 0; LoopCount := 0; repeat Number := Number + 3; LoopCount := LoopCount + 1; until Number > 100; // Number が 100 より大きければループ終了 ShowMessage('Number は' + IntToStr(Number)); ShowMessage(IntToStr(LoopCount) + '回ループしました'); end;
上のプログラムを図で示したのが下図です。
while 文では、ループするかどうかの判定をループ開始時に行い、判定が True の場合に ループを行いますが、repeat 文では、ループするかどうかの判定をループ終了時に 行い、判定が True の時にループを終了します。
while 文と repeat 文との違いを表しているのが、次のプログラムです。
procedure TForm1.Button1Click(Sender: TObject); var whileNumber : Integer; whileLoopCount : Integer; repeatNumber : Integer; repeatLoopCount: Integer; begin whileNumber := 50; whileLoopCount := 0; while whileNumber < 30 do begin whileNumber := whileNumber + 50; whileLoopCount := whileLoopCount + 1; end; repeatNumber := 50; repeatLoopCount := 0; repeat repeatNumber := repeatNumber + 50; repeatLoopCount := repeatLoopCount + 1; until repeatNumber > 30; ShowMessage('whileNumber は' + IntToStr(whileNumber)); ShowMessage('while 文では' + IntToStr(whileLoopCount) + '回ループ'); ShowMessage('repeatNumber は' + IntToStr(repeatNumber)); ShowMessage('repeat 文では' + IntToStr(repeatLoopCount) + '回ループ'); end;
while 文では、ループするかどうかを whileNumber < 30 で行っています。 whileNumber は、ループに入る前に 50 に初期化されていますので、whileNumber < 30 の評価時には 既に False です。ですからループは一度も行われません。
一方 repeat 文でもループに入る前に repeatNumber を 50 に初期化していますが、 ループするかどうかの判定は最後に行われますので、repeatNumber の値がなんであろうと 必ず一度はループします。そして、repeatNumber > 30 が評価され、True であればループ終了、 False であればもう一度ループし、再度 repeatNumber > 30 が評価されます。
また、サンプルプログラムからも分かりますが repeat 文では、実行される文が複数存在しても begin と end で囲む必要がありません。つまり、以下のようにしなくても良いことになっています。
repeat begin // 必要ありません .... .... end; // 必要ありません until repeatNumber < 30;