2017年9月22日金曜日

forおじさん

なんでもかんでも、ループ処理に for を使う年配プログラマーの事を言うそうです。
おそらく、C言語から入った人ではないでしょうか?
たしかにPHPでは for って滅多に使いませんね。

forを見ると、無性に他の処理で置き換えたくなることもあります。
だって、forはめんどくさい場合が多いですもん。

たとえば、

max = count($a);
for (i=0;i<max;i++) { $a[i] }

こういう無駄に複雑な処理!

foreach ($a as $item) {$item}
としたほうが、扱いが非常に楽です。
楽ってことは、バグが入りにくいです。

さらに処理内容によっては、map系など各要素にコールバック関数を適用する関数を使うとさらにスマートで不具合が出にくくなります。

まぁ、foreach だけ使ってれば大抵問題なし。 便利すぎます。

whileもありますが、私はforeachじゃ面倒な場面で使う程度です。滅多に使いません。

phpマニュアルにあるような例

$i = 1;
while ($i <= 10) {
    echo $i++;
}

これだと、while ではなく for を使います。

for ($i=1; $i <= 10; $i++) { echo $i;}

可読性の問題です。

まとめると

①配列をループで取り出す場合は、foreach。
②条件でループさせるる場合は、while。※初心者が意図せず無限ループさせる鬼門
③決まった回数をループさせる場合は、for。
④配列の各要素で処理するなら、集合関数。※foreachにする場合もあり

①と④は似てますが、たとえば①は途中でbreak;が行えますが、④は必ず全ループです。
あとは、スコープの違いがあるため、変数の扱い方が異なります。

ちなみに
「foreach の最中に、元の集合を追加・削除するのは禁忌事項です」
という情報を見かけたが、PHPのforeachを理解していないと思われます。
元の集合を追加・削除する時こそ、foreachが有効だし、これができるというのがforeachの特徴である。