While文
テンプレート:小文字 while文はプログラミング言語において条件が真の間だけ与えられた文の実行を繰り返すループを記述するための文である。
ループの記述には、前置判定と後置判定の2つがある。前置判定は最初に条件式の評価を行い、真であればループ内の処理を行う。C言語などでは while(式) {文}
が前置判定となる。後置判定は最初にループの処理を行い、その後に条件式の評価を行う。同様にCでは do {文} while(式);
が後置判定となる。両者の違いは、前置判定では条件が偽であれば一度もループ内の処理を行わないの対して、後置判定では最低1回はループの内の処理が行われる点にある。
文法
Cおよびそれに類する言語の場合
C, C++, C#, D, Java, Perlなどでは基本的な構文は以下のようになる。
while(条件) {
文
}
このループは次のような手順で実行される。
- 条件を評価する。条件が偽ならば、ループを終了する。
- 真文を実行する。
- 条件の評価に戻る。
条件がはじめから偽の場合は、真文は一度も実行されないことになる。
C言語のwhile文は、初期化とカウンタ変数の更新を省略したfor文として書き換えることができる。したがって、C言語のwhile文はfor文を特殊化したものといえる。ただし、while文ではループの条件を省略できない点がfor文と異なる。
例文
int x = 0;
while (x < 100) {
printf("x は %d です。\n",x);
x++;
}
これを実行すると、次のような出力結果が得られる。
x は 0 です。 x は 1 です。 ………… x は 98 です。 x は 99 です。
はじめ変数xの値は0であり、真文が1回実行されるたびに1が加えられる。真文が100回実行されるとxの値は100になり条件が成り立たなくなるため、このときこのループは終了する。
ループを終了するには、ループの条件を偽にするほかに真文においてbreak文を使う方法もある。ループの条件が常に真であり、真文にbreak文が含まれていない場合(またはbreak文が実行されない場合)、ループは無限ループとなる。また、真文が複数の文からなる場合、continue文を使うことで真文の実行を中止し、条件の評価から処理を再開することができる。
Pascalの場合
Pascalでは、前置判定としてwhile, do を、また後置判定として repeat, until を使用する。
前置判定
while 条件 do 文
後置判定
repeat 文; 文...; 文 until 条件
repeat-untilでは、条件式が偽の間はループの処理を行い、真になるとループを抜ける点が、Cなどの do-while と異なっている。whileと異なり、必要に応じ複数の文をrepeatとuntilの間における。
Visual Basicの場合
Visual Basicでは、条件が真の間にループを継続するための前置判定としてWhile、Do Whileを、後置判定としてDoを用いる。
Whileによる前置判定
While 条件
文
Wend
Do Whileによる前置判定
Do While 条件
文
Loop
Doによる後置判定
Do
文
Loop While 条件
Visual Basicでは、前置判定、後置判定を問わず、条件が偽の間にループを継続することも可能である。前置判定としてDo Until、後置判定としてDoを用いる。ただし、Whileとは異なり、Doを伴わないUntilは利用できない。
Do While文による偽の前置判定
Do Until 条件
文
Loop
Do文による偽の後置判定
Do
文
Loop Until 条件