forループを深く考えてみた

for(;;) のつづき

友人にしてプログラムの先輩でもある krshin からのコメント「for()もwhile()も内部でやってることは条件付ループ(省略)」で目から鱗

もしかして for文 は(内部的には)セミコロンの間の真偽を判断しているだけか!

と今頃気づいて実験してみたらビンゴでした。

/**
 * ;; の間が省略されるか真ならばループ、偽ならばループされません.
 * sample では書式を揃えるために break を挿入するも、;; の間が偽ならば break するまでもなし.
 */

// 1 - 30
for ($i = 1; ; $i++) {
	print($i);
	if ($i == 30) break;
}

// 1 - 30
for ($i = 1; true; $i++) {
	print($i);
	if ($i == 30) break;
}

// 出力なし
for ($i = 1; false; $i++) {
	print($i);
	if ($i == 30) break;
}

// 出力なし
for ($i = 1; 0; $i++) {
	print($i);
	if ($i == 30) break;
}

// 1 - 30
for ($i = 1; 3; $i++) {
	print($i);
	if ($i == 30) break;
}


実用的には何にも役に立たないけど、地味にうれしい発見でした。


ありがとうkrshin!!



[追記]

マニュアルにしっかり書かれてました orz

http://www.php.net/manual/ja/control-structures.for.php