<<   2017年 10月   >>
S MTW TF S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31     

検索・ログイン
ログイン
現在のモード: ゲストモード
USER ID:
PASS:
管理者ページ
新着記事
カテゴリー

月別記事
ランキング
コメント
リンク
プロフィール
その他

POWERED BY
POWERED BY
ぶろぐん
PHP
PostgreSQL
SKIN BY
ブログンサポート

ブロックスコープとループ処理
CやC++になじみのある人だと、以下のような処理は良くやると思います。

int e1 = 0;
for (int i= 0; i < 10; i++){
    for (int i = 0; i < 5; i++){
        e1++;
   }
}

自分もC++が長かったので、これはごく普通の何でもないループ処理だと思っていたのです。この場合 e1 = 50となります。ところが似たようなことをphpでやっちゃうとはまります。

$e1 = 0;
for ($i= 0; $i < 10; $i++){
    for ($i = 0; $i < 5; $i++){
        $e1++;
   }
}

これ、無限ループになります。phpに慣れた人だと当たり前でしょ? って思うかもしれませんが、変数のブロックスコープが有効じゃないって事を知らないとやってしまいそうです。事実やりかけましたw

c++などの変数の型にうるさい言語を長く使っていると、phpやその他の最近のスクリプト言語の柔軟さに戸惑いを覚えたりしますが、慣れると便利なものだなぁと分かります。けれど言語仕様ごとの似てるようで実は違うよ、って部分は特に気を付けていないと駄目ですね。

phpのループ処理は、while、for、foreachがありますが(do ~ while は滅多に見ませんね)、なぜか世の中のソースの多くがwhile使ってるんですよね。foreachやforの方が使いやすくないのかなぁと思うんですが、何が理由なんでしょう?

自分はwhileは滅多に使いません。ループ回数を指定しないで条件判断のみで繰り返し処理って言うのは、書いた直後はいいんですが、後からその部分を改良しなければならなくなった時に、ブロック内に加えた処理が不用意に条件式に影響を与えないように注意しないと駄目です。一目で見渡せるくらいのブロックならいいんですが、長くなることも多いですし。

その点配列を処理するならforeachを、普通のループならforを使うんですが……そう言う人は少ないのかなぁ。
ソフトウェア::php◇07:12◇comments (0)trackback (0)
コメント
コメントする









画像の文字を半角で入力して下さい。
この記事のトラックバックURL
http://www.ikumi-u.net/blogn/tb.php/20
トラックバック