for
ループ
for
ループは、 while
ループと同じ目的で使用される。for
を使用すると、ループの反復に関する定義や式を同じ行に記述することができる。
for
は、実際にはforeach
ほどは使用されないが、まずfor
ループを理解しておくことが重要だ。foreach
については、後の章で説明する。
while
ループのセクション
while
ループは、ループ条件を評価し、その条件がtrue
である限り、ループの実行を続ける。例えば、1から10までの数字を出力するループでは、11 未満という条件をチェックする。
ループを反復するには、ループの最後にnumber
を加算する:
Dコードとしてコンパイル可能にするには、number
は最初の使用前に定義されている必要がある:
最後に、ループ本体内の実際の処理がある:
これらの4つのセクションは、次のように希望するループに結合できる:
while
ループの反復中に、while
ループのセクションは次の順序で実行される:
準備 条件確認 実際の作業 反復 条件確認 実際の作業 反復 ...
break
文またはスローされた例外も、ループを終了させることができる。
for
ループのセクション
for
ループは、これらのセクションの3つを1行にまとめる。これらは、for
ループの括弧内にセミコロンで区切って記述される。ループ本体には実際の処理のみが含まれる:
同じコードをfor
ループとして記述した例である:
for
ループの利点は、ループ本体に多数の文がある場合にさらに明らかになる。ループ変数を加算する式は、ループの他の文と混在することなく、for
行で表示される。また、宣言された変数がループの一部としてのみ使用され、周囲の他のコードでは使用されていないこともより明確になる。
for
ループのセクションは、while
ループと同じ順序で実行される。break
およびcontinue
文も、for
ループとまったく同じように機能する。while
ループとfor
ループの唯一の違いは、ループ変数の名前スコープだ。これについては、以下で説明する。
非常に一般的だが、反復変数は整数である必要はなく、また、加算によってのみ変更される必要もない。例えば、次のループは、前の浮動小数点値の半分を出力するために使用される。
中括弧で囲んで定義することで、複数のループ変数を定義することができる。例えば、次のループは、異なる型の2つの変数を定義している。
準備セクションは、強調表示された中括弧で囲まれた部分であり、準備セクションと条件セクションの間にはセミコロンがないことに注意。
セクションは空にすることもできる
for
ループの3つのセクションはすべて空にすることができる:
- 特別なループ変数が必要ない場合もある。これは、既に定義された変数を使用するためだ。
- ループ条件に依存するのではなく、
break
文によってループが終了する場合もある。 - 反復式が、ループ本体内でチェックされる特定の条件に依存する場合もある。
すべてのセクションが空の場合、for
ループは無限ループを意味する:
このようなループは、決して終了しない、あるいはbreak
文で終了するように設計することができる。
ループ変数の名前スコープ
for
ループとwhile
ループの唯一の違いは、ループの準備時に定義される変数の名前スコープだ:変数は、for
ループ内でのみアクセス可能で、ループ外からはアクセスできない:
一方、while
ループを使用する場合、変数はループを含む同じ名前スコープで定義されるため、ループ終了後も名前はアクセス可能だ:
前の章で、名前は最初に使用される場所にできるだけ近い場所で定義するというガイドラインを紹介した。このガイドラインの根拠と同様に、変数の名前空間は小さいほど良い。この点から、ループ変数がループの外で必要ない場合は、while
ループよりもfor
ループの方が良い。
演習
-
次の9x9の表を、2つの
for
ループ(1つは他方の内部にネスト)を使用して出力しよう:0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 1,0 1,1 1,2 1,3 1,4 1,5 1,6 1,7 1,8 2,0 2,1 2,2 2,3 2,4 2,5 2,6 2,7 2,8 3,0 3,1 3,2 3,3 3,4 3,5 3,6 3,7 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 5,0 5,1 5,2 5,3 5,4 5,5 5,6 5,7 5,8 6,0 6,1 6,2 6,3 6,4 6,5 6,6 6,7 6,8 7,0 7,1 7,2 7,3 7,4 7,5 7,6 7,7 7,8 8,0 8,1 8,2 8,3 8,4 8,5 8,6 8,7 8,8
-
1つまたは複数の
for
ループを使用して、幾何学的なパターンを生成するために必要な数の*
文字を出力しよう:* ** *** **** *****
******** ******** ******** ******** ********
など。