Pages

Subscribe:

2011-09-15

PHPの基礎~入れ子(ネスト)について

if文、for文、while文と勉強し書けるプログラムの幅が広がってきました。
今回はそれらを組み合わせて使う方法として入れ子の構造についてまとめようと
思います。

ネスト構造とも呼ばれる入れ子構造ですが、
HTMLのdivやリストなどでも同じような使い方があるので、
どんなものかというのはだいたい分かるでしょうか。
要はfor文の処理の中でif文を使ったりできるということです。

for文の中のif文

前々回、for文のバリエーションの中で
「1~10の間の偶数のみ表示する」方法を紹介しました。
for文の中にif文を含める方法でも同じことを実現することができます。
以下例文です。


文を入れ子にしたい場合、「{ }」の中にもうひとつの文を入れるようになります。
上記の例だと「$i」を「1~10」まで繰り返す間に、
もし「$i」が偶数だったら「$i」を表示する、というのが全体の意味になります。

if文の中の条件式「$i % 2 == 0」は、
「$i」を「2で割ったときの余り」が「0」と等しいとき、という意味です。
(演算子参照)
2で割り切れる数はすなわち偶数なので、
条件式は「$i」が偶数のときという意味になるというわけです。
ちなみに奇数は「$i % 2 == 1」で表現することができます。

while文の中のif文

今度は「20~1」の間の奇数のみをwhile文で書いてみます。
基本形は変わりませんが、減らす方をやってなかったので。
while文の中にif文を入れ子にすると以下のようになります。



while文で気をつけなくてはならないのは処理の中に増減式を書くことです。
if文を入れ子にした場合はそのif文の処理の外で
且つwhile文の処理の中になるように増減式を書くようにします。
上記の例の場合、if文の前に増減式を書いてもとくに表示に変化はありませんが、
条件によっては増減式をif文より先に書いてしまうと、
意図した表示にならない場合があるので、順番には注意が必要です。

例えばif文の条件が偶数で、「$i--;」がif文より先に来た以下のような場合、
if文が実行される前に「-1」されてしまうので最初の20が表示されなくなって
しまいます。





今回はfor文・while文とif文の組み合わせを例に出しましたが、
for文の中にfor文というのもあったりするので、なかなかやっかいです。
入れ子の構造は今後関数やクラスが出てくるとあたり前のように使われます。
考え方自体はそれほど難しくないのですが、
やっと覚えたばかりの構文を入れ子にするとか言われると
ちょっと頭がついていかない…

「{ }」の位置を合わせてなるべく読みやすく書いたり、
紙に書いて、処理ごとに色のついたペンで囲ったりしてみると見やすくなって
理解しやすくなるのではないかと思います。

まずはこういった使い方もできるということを知った上で、
ひとつひとつの構文の使い方の理解を深めていけば自然と使えるように
なってくるはずです。

0 件のコメント:

コメントを投稿