「For文」の版間の差分
AuBot~jawiki (会話 | 投稿記録) m ボットによる:Bot作業依頼#Java (プログラミング言語)のリンク元修正依頼 |
m Bot: テンプレートの差替え (WP:BOTREQ#スタブテンプレート修正依頼) |
||
83行目: | 83行目: | ||
*[[制御構造]] |
*[[制御構造]] |
||
{{ |
{{Computer-stub}} |
||
[[Category:制御構造|FORぶん]] |
[[Category:制御構造|FORぶん]] |
||
2008年1月27日 (日) 11:31時点における版
for文(フォーぶん)はプログラミング言語において条件が真の間だけ与えられた文の実行を繰り返すというループを記述するための文である。forループは、whileループと違って、ループに入る前の初期化(通常カウンタ変数の初期化を行なう)を含む点で異なる。
また言語によってはforeach文をfor … in … のように書くことがあり、このときのfor文はイテレータの繰り返し処理をする文になる。
文法
Cおよびそれに類する言語の場合
awk, C, C++, C#, D, Java, JavaScript, Perlなどでは基本的な構文は以下のようになる。
for(初期化; ループの継続条件; カウンタ変数の更新) { 文 }
このループは次のような手順で実行される。
- 初期化を実行する。
- 条件を評価する。条件が偽ならば、ループを終了する。
- 真文を実行する。
- カウンタ変数の更新を実行する。
- 条件の評価に戻る。
条件がはじめから偽の場合は、真文は一度も実行されないことになる。また、初期化・条件・カウンタ変数の更新の三つは、それぞれ省略することが出来る。条件を省略した場合、条件は常に真であるとみなされる。例えば、初期化とカウンタ変数の更新を省略し、条件のみを記述する場合、次のようになる。
for (; x < 100;) { …… }
初期化などを省略した場合でも、丸括弧内で区切りとして使われる ; を省略することはできない。
例文
int x; for(x = 0; x < 100; x++) { printf("x は %d です。\n",x); }
これを実行すると、次のような出力結果が得られる。
x は 0 です。 x は 1 です。 ………… x は 98 です。 x は 99 です。
はじめ変数xの値は0であり、真文が1回実行されるたびに1が加えられる。真文が100回実行されるとxの値は100になり条件が成り立たなくなるため、このときこのループは終了する。
ループを終了するには、ループの条件を偽にするほかに真文においてbreak文を使う方法もある。ループの条件が常に真であり、真文にbreak文が含まれていない場合(またはbreak文が実行されない場合)、ループは無限ループとなる。また、真文が複数の文からなる場合、continue文を使うことで真文の実行を中止し、カウンタ変数の更新から処理を再開することができる。
C言語のwhile文は、初期化とカウンタ変数の更新を省略したfor文として書き換えることができる。したがって、C言語におけるfor文はwhile文を一般化したものといえる。
Pascalでの構文は以下のようになる(BASICの基本的な構文も同様である)。
for 変数 := 初期値 to 終値 do 文
このループは次のような手順で実行される。
- カウンタ変数に初期値を代入する。
- カウンタ変数の値が終値よりも大きいならば、ループを終了する。(条件の評価)
- 文を実行する。
- カウンタ変数の値を次の値(SUCC関数の結果。整数型変数なら1を加えることになる)にし、条件の評価に戻る。
C言語などと異なり、初期化とカウンタ変数の更新がそれぞれ、初期値の代入と1を加えることに限定され、さらにループ継続条件が「カウンタ変数が終値よりおおきいか否か」だけに限定されている。そのため、Cのfor文よりも特殊化されたものと考えることができる。
例文
for x := 0 to 99 do writeln('x は ',x,' です。')
実行結果はCおよびそれに類する言語の場合で示したのと同様である。
FOR 変数 = 初期値 TO 終値 STEP 加算値 文 NEXT 変数
このループは次のような手順で実行される。
- カウンタ変数に初期値を代入する。
- カウンタ変数の値が、初期値が終値よりも小さい場合大きいならば、また、初期値が終値よりも大きい場合小さいならば、ループを終了する。(条件の評価)
- 文を実行する。
- カウンタ変数の値に加算値を足し、条件の評価に戻る。
また、以下の条件の場合には省略可能な部分がある。
- "STEP 加算値" が省略された場合、加算値は1とみなされる。
- FOR文が入れ子になっていない場合、NEXTのあとの変数は省略できる。