for文制御


柔軟なループ制御

プログラムで重要な項目として「ループ制御」があります
一定の作業を効率よくするためにも、特定のステートメントを繰り返す制御は大切です

ループ制御はfor文以外にも存在しますが
C言語系プログラマはよくご存知のとおり、for文はその中でもっとも柔軟といわれます

for文は単一のステートメントを指定回数だけ繰り返すというものです(基本的に)

for (initialization ; expr ; step) statement;

まず、initializationで変数の初期化を行うのが普通です
ここで初期化された変数は、繰り返された回数を制御するために、つまりカウンターとして使われます
initializationはループ開始時に1度だけ実行されます

exprはif文同様に関係演算子を用いた式を評価します
ここで評価された結果が真(True)の場合のみステートメントがループされます

stepには通常カウンターとして用いている変数をインクリメントします
デクリメントするというケースもありますし、別な数で加算するというケースも考えられますが
通常はインクリメントを用います

exprとstepは繰り返されるごとに実行され
exprの評価が偽になったときにループを抜けます
statementには単体のステートメントかコードブロックを指定します
class test {
	public static void main(String args[]) {
		int count;
		for (count = 1 ; count <= 10 ; count++)
			System.out.println("count = " + count);
	}
}
Java言語の場合はC++同様にforの変数の初期化部分で変数を宣言することもできます
上のプログラムはどちらかというとCプログラム風ですね☆

ただし、評価する式が最初から偽を返した場合は1度も実行されません

forの初期化部分は、C++同様に一時的変数の宣言も可能です
ここで宣言された変数は、ループを抜けると破棄されます
一時的に、forループで使用するカウンターとして利用することができます
class test {
	public static void main(String args[]) {
		for(int i = 0 ; i < 10 ; i++)
			System.out.println("Kitty on your lap");
	}
}
カウンター変数をfor分の初期化部分で宣言しています
ここで宣言された変数 i は、forループのステートメント(または、コードブロック内)でしか使用できません


空のfor文

for文を作成するときに、カウンタ変数の初期化や式の評価、インクリメントなどを行いました
しかし、これらは全て省略可能であることを知ってください
それこそがfor文がもっとも柔軟性に長けたループ制御ステートメントであるといわれる由縁なのです

for (;;) stametent;

この場合は、式がないので常に真を返します
つまり無限ループです
ループステートメントの中ではbreakステートメントというのが有効です
これは、現在のループを強制的に抜け出すことができます
こうすることで、本来 for( ; ; )で指定するべき内容をコードブロックの中でプログラマがカスタムに行うことができます
class test {
	public static void main(String args[]) {
		int count = 0;
		for (;;) {
			System.out.print("count = " + count + "\r");
			count++;
			if (count > 9999) break;
		}
		System.out.println("ループを抜け出しました");
			
	}
}
おやぁ、普段printlnメソッドだった部分がprintになっていますね
これはprintlnメソッドとほとんど同じなのですが、自動改行しません

for文で指定されているコードブロックでは、現在のcount変数の値を出力して
count変数に1加算してifで評価します
もしcoutn変数が9999以上であればbreakステートメントでループを抜けます

このように、forステートメントは( ) 内の好きな部分を省略することができます
必要に応じて独自のバリエーションで記述することができるのです


for ([initialization] ; [expr] ; [step]) statement;

ループ制御します
exprが真の間、statementを実行します
一度繰り返されることにexprとstepが評価されます

initialization - 省略可能です。カウンター変数を初期化します

expr - 省略可能です。評価する式を指定します。省略した場合は真を返します

step - 省略可能です。繰り返されることに実行されます。通常はカウンタ変数をインクリメントかデクリメントします



前のページへ戻る次のページへ