WisdomSoft - for your serial experiences.

for文

for 文の使い方を説明します。for 文は繰り返し処理を管理するためのカウンタ変数とインクリメント処理を構文でサポートします。

変数の初期化と更新

while 文や do 文による反復処理は、繰り返し回数の管理を埋め込み文の中で行わなければなりませんでした。目的となる反復処理のコード中に、反復処理を管理するためのコードが混ざることは、コードとして洗練されているとは言えません。

多くの開発者は、カウンタ変数の初期化、条件式、カウンタ変数のインクリメントという一連の工程を構文でサポートする for 文(for statement)を好んで使います。

for文
for (初期化子 ; 条件式 ; 反復式) 

初期化子(for-initializer)にはカウンタとして利用するローカル変数宣言、または任意の式を指定します。for 文の初期化しは反復処理を開始する直前に一度だけ実行されます。

条件式には文を繰り返すかどうかを判断するブーリアン型の値を返す式を指定します。while 文や do 文と同じように、条件式が true であれば埋め込み文が繰り返し実行され、false が返された時点で処理を抜け出します。

反復式(for-iterator)は、埋め込み文が実行された後に評価される任意の式です。一般には、ここで条件となっているカウンタ変数をインクリメントすることになるでしょう。

図1 for文の流れ
for文の流れ

for 文の初期化子でローカル変数を宣言した場合、そのローカル変数は for 文の埋め込み文がスコープとなります。for 文を抜け出すと無効になるので注意してください。

コード1
class Test
{
	static void Main()
	{
		for (int i = 0 ; i < 10 ; i++)
			System.Console.WriteLine(i + "回目のループです");
	}
}
実行結果
コード1 実行結果

コード1は一般的な for 文の使い方の例です。繰り返し回数を数えるための i 変数を宣言し、この値が 10 より小さければ繰り返します。埋め込み文が実行されると反復式に記述しているインクリメントが実行されるため、やがて条件が false となり for 文を抜け出します。

for 文の初期化子はローカル変数宣言、またはカンマ区切りの式のリストを指定できます。すでにカウンタ用の変数が用意されている場合などでは、変数を初期化する任意の式を書くこともできます。

同様に、反復式も任意の式のリストを指定できます。複数の式を実行したい場合はカンマで区切ってください。

コード2
class Test
{
	static void Main()
	{
		int x, y;
		for (x = 9, y = 1; x != y; x--, y++)
			System.Console.WriteLine("X=" + x + ", Y= " + y);
	}
}
実行結果
コード2 実行結果

このプログラムは繰り返し処理で x 変数と y 変数という 2 つの変数を扱っています。これら 2 つの変数が同じ値になった時に for 文から抜け出します。変数の初期化やインクリメントとデクリメントの処理のために、カンマ区切りで複数の式を記述しています。

for 文の初期化子、条件式、反復式は省略可能です。条件式が省略された場合、常に true であると判断されるため、埋め込み文の中で強制的に抜け出さない限り繰り返し続けることになります。

コード3
class Test
{
	static void Main()
	{
		for ( ; ; )
			System.Console.WriteLine("俺のターン!");
	}
}
実行結果
コード3 実行結果

コード3は for 文の条件式を省略しているため文を繰り返し続けます。