Pages

Subscribe:

2011-09-04

PHPの基礎~繰り返し(for構文)

今回から繰り返し(ループ)の構文に入ります。

繰り返しの構文にはfor文、while文、foreach文とありますが、
foreach文に関しては後に勉強する「配列」と組み合わせて利用することになるので、
そのとき改めて触れることにします。

今回はfor文についてまとめていきます。


繰り返すということ

繰り返しの構文は最初はなかなか理解するのが難しいと思います。
(私はそうでした…)

例えば「$i = 1」という変数があったとして、
これに1ずつ加えていって最終的に10まで全てをブラウザに表示させたいといった場合、
これまで勉強してきた内容で実現しようとすると、
以下のようになります。

少し見づらいかも知れませんが…
計算式で1ずつ増やし、ブラウザには1から10までが表示されました。
(間のスラッシュは見やすさのために追加しています。)
ちなみに「$i = $i + 1」は「$i += 1」でも同じです(演算子を参照)。

自分を例にとって話を進めさせていただくと、
まずこれがなんでそのブラウザの表示につながるんだか分からないハズ。

前にも書いたかも知れませんが、
プログラムは上から順に読み込まれ、計算式は右辺から行われ、
変数はあとから同じ変数に違う値が代入されると、
値が上書きされていくという性質があります。ここけっこう重要です。

そのため、
2行目で「1」が代入された「$i」を、そのタイミングで「echo」させているので、
ブラウザにはまず「1」が表示されます。
3行目で(ここがややこしいのですが…)、右辺から先に計算をするので、
すでに「1」が代入されている「$i」に「+1」をして
それを左辺の「$i」に代入しているので、
最終的に3行目の左辺の「$i」は「2」になります(つまり「$i = 1 + 1」)。
またそれをそのタイミングで「echo」させているのでブラウザには「2」が表示されます。

…とこれを繰り返していき、
「$i」に1ずつ加えて「1」~「10」を表示させることができました。

今回はなんとか形にはなりましたが、計算させたい回数が増えたりすると
大変なことになりそうです。

何が言いたいかというと、要は同じことを何度も書いているということです。
まさに「繰り返し」です。
for文はこのように同じ処理を何度もさせたい(繰り返したい)場合に使うことで
プログラムをスッキリさせることができます。

for文

前置きが長くなりましたが、繰り返しの構文は
「どこから(初期値)どこまで(最大値or最小値)どのように増減しながら繰り返すのか」を
指定するものです。
for( 初期値式; 条件式; 増減式; ){ 条件式がtrueの間繰り返したい処理 }
初期値式で初期値を決め、
条件式でどこまで繰り返すか最大値(最小値)を決め、
増減式でどのように繰り返すかを決めます。
「どのように」というのはいくつずつ増やす(減らす)のかということです。
ここで、演算子のときに説明したインクリメント(デクリメント)が頻繁に
登場するようになります。

「{}」の処理は増減式に従い増え続けるか減り続けるかしながら、
条件式の条件に合う限り繰り返されます。

先ほどたくさん繰り返した文をfor文で書いてみます。

結果は同じなので割愛します。
先ほどの10行分のプログラムが3行でまとまってしまいました。
最初はカッコの中に3つも文があるのでとっつきづらいですが、
構造としてはそこまで難しいものではないハズです。

初期値式で「$i」の初期値を「1」として「1」から始めることを決め、
条件式で 「$i <= 10」(「$i」が10以下の時)までと決め、
増減式で「$i++」(「$i」は1ずつ増えていく)と決めています。
そして条件式が適用される間、繰り返し「$i.'/'」をechoで表示させる処理を
行わせています。

一度「{}」の中の処理が終わると「$i」が「$i++」に従い1増やされ、
もう一度「{}」の処理に戻ってくるようなイメージです。
たぶん、for文がイマイチ理解できないという人は、
この「{}」の中と外の感覚を掴むのが難しいのではないかと思います。

for文の動き

というわけでちょっと実験してみます。

for文が終わった後に改行と「こんにちは」という文字列を追加します。
結果は以下の通り、数字の表示の後が改行されて文字列「こんにちは」が表示
されました。

次に、同じ改行と文字列をfor文の処理に含めてみます。
結果は以下の通り。
「$i」が表示された後改行されて「こんにちは」を表示するという処理が
10回繰り返されました。
つまり「{}」の後に書いた文はfor文の処理が全て終わってからでないと
実行されないということや、
「{}」の中は書いた処理が全て繰り返されていくということが分かると思います。

あたり前だろと言われてしまいそうですが、
私はここがfor文の最初の壁になるのではないかと思っています。

ちなみにホントはこうなる予定でした。
確かによく考えればこう書かなきゃダメなのは分かるのだけど。
あんまり理解してない証拠ですね…

for文の中身がどんな動きをするか、これはプログラムを自分で書きながら
少しずつ感覚を掴んでいくしかないと思います。
言葉にしようとすると難しいですね。

分かっていたつもりでも、for文を使ったプログラムをHTMLのテーブルタグと
組み合わせるぞー!とかいう話になると一気に自信が揺らいだりします。
それはまた後に触れることにして、
長くなってしまったので今回はこの辺で。

次ももう少しfor文について例を挙げてみたいと思います。

0 件のコメント:

コメントを投稿