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