while文

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

while文プログラミング言語における制御構造のひとつで、ループするである。英単語 while の意味「何々である間」の通り、なんらかの式を評価した値が真である間、ループする。

C言語、およびそれに類する言語では、ループの先頭の部分に判定が入る。do-while文の記事も参照のこと。

[編集]

Cおよびそれに類する言語[編集]

C, C++, C#, D, Java, Perlなどでは以下のような構文である。

while (条件) {
    ...  // ここの部分を「ループ本体」と呼ぶ
}

このループの実行は、次のような手順となる。

  1. 条件を評価する。条件がならば、ループを終了する。
  2. 文... を実行する。
  3. 条件の評価に戻る。

条件がはじめから偽の場合は、文は一度も実行されず、次に移る。

プログラム例[編集]

int x = 0;
while (x < 100) {
    printf("x は %d です。\n",x);
    ++x;
}

これを実行すると、次のように標準出力に出力する。

x は 0 です。
x は 1 です。

…………
 
x は 98 です。
x は 99 です。

変数xの初期値は0である。ループ中の x++; が1回実行されるたびに、xはインクリメントされる。xが99で出力を行った後、xの値が100になった状態では、条件は成り立っていないので、ループは終了する。

break文は、ループ本体の複文(ブロック (プログラミング) )の途中からであっても、またwhileの条件が成り立っていても、ループ中から抜け出す。continue文はループの途中から、ループ本体の最後に飛び[1]、while文の場合にはそこから先頭に戻って条件の評価となる。

Pascal[編集]

Pascalには、while文と同様の、キーワードとして whiledo を使う文がある。また、do-while文と似た、かつ、条件について「真になったら終了」の、キーワードとして repeatuntil を使う文がある。Pascalの、LL(1)の単純な構文というポリシーから、両方で全く違うキーワードを使う設計(デザイン)となっている。

構文[編集]

while 条件 do 
repeat ; ...;  until 条件

whileでは複数の文を置く場合には begin〜end で複文にしなければならないが、repeat〜until はそれ自身が暗黙のブロック構文になっているので、セミコロンで区切って複数の文を置くことができる。

Basic[編集]

Full BASIC(INCITS/ISO/IEC 10279-1991 (R2005) "Information Technology – Programming Languages – Full BASIC")には、ループの多くのパターンに対応する柔軟性のあるDo〜Loop文がある。またVisual Basicには、それに加えて伝統的なBASICのWHILEに近いWhile文もある。

構文[編集]

単純であるので、先にWhile文を示す。

While文は以下のような構文である[2]

While 条件
    ...
    [ (Continue|Exit) While ]
    ...
End While

Exit While はbreak文、Continue While はcontinue文に相当する働きを持つ。

Do〜Loop文は以下のような構文である[3]

Do [(While|Until) 条件]
    ...
    [ (Continue|Exit) Do ]
    ...
Loop [(While|Until) 条件]

Do の後に While を続ければ、while文に相当し、Loop の後に Until を続ければ、Pascalの repeat〜until に相当する。どちらにも条件を付けなければ、単純な無限ループになる。(これは、C言語やそれに類似した言語しか知らない者には、何か奇抜なものに見えるかもしれないが、構造化プログラミングが学界で話題であった時代(特に、クヌースの言う所の「第2幕」である、1968年のレターGo To Statement Considered Harmfulによって始まった論争)の頃には提案されていた構文と意味(セマンティクス)である)

[編集]

  1. ^ しばしば「continue文はループの先頭に戻る」と説明されているが、そうするとdo-while文の場合の動作について一貫した説明にならない。「continue文はループ本体の最後に飛ぶ」とすれば、一貫した説明になるし、実際に標準規格もそのように書かれている。
  2. ^ https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/while-end-while-statement
  3. ^ https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/do-loop-statement

関連項目[編集]