while構文は基本的にはfor構文と同じようなものです。
少し複雑に感じる場合は、for文の構造と照らし合わせながら考えると
覚えやすいのではないかと思うので、
実際にfor文から置き換えながら説明していきます。
(for文については前回記事、前々回記事参照)
while( 条件式 ) { 条件式が満たされている間、実行される処理 }
この基本形だけ見るとずいぶんシンプルな構造に見えますが、実際にはfor文の初期値式に相当する変数を先に定義しておくことと、
無限ループを回避するために処理の中で変数を増減させていくことが必要に
なります。
前々回書いたfor文のサンプルと同じ意味になるwhile文を書いてみます。
まずこちらがそのfor文です。
これをwhile文に書き直してみます。
最初の「$i = 1」がfor文の初期値式に相当します。
whileのあとのカッコの中が条件式(この場合だと「$i」が10以下の時)、
最後の処理の部分が増減式を兼ねていることが分かります。
ブラウザで確認してみると以下のようになります。
同じ意味のwhile文を作ることができました。
無限ループに注意!
while構文で注意しなければならないことは、無限ループにはまらないようにすることです。
無限ループはプログラムには一応不備がないためエラー表示が出ず
ひたすら処理が繰り返されていくため、ブラウザの動作がだんだん重たくなり
最終的には強制終了しないと動かなくなってしまうという現象が起こります。
勉強している段階ではこれに何度もハマり、
けっこうイライラしてしまうかも。
上記のwhile文の場合、
whileの後に続くカッコの中の条件式は「$i <= 10」なので、
「$i」が10以下の場合は処理がずっと繰り返されることになり
「{ }」の処理の中で「$i」を増加させるのを忘れてしまうと
最初の「$i」はずっと「1」のままなので、条件式に合い続けるため
それをブラウザに表示させると、「1」が表示され続けるという
世にも恐ろしい現象が起こります。
試すことも必要かも知れませんが、あまりおすすめはできません。
回避するためには理解することが不可欠なのですが…なかなかどうして。
「<」「>」の向きに気をつけたり、
処理の中で増減させることを忘れないように注意することが
回避の早道かも知れません。
ちなみに自分は無限ループが怖いのでなるべくfor文を使うようにしています!
for文、while文と一通りの説明は終わりましたが、
ほかに繰り返しには途中で処理を抜けることができる、
「break」というものがあります。
これはこの後入れ子の構造を少し勉強した後改めてまとめていこうと思います。
0 件のコメント:
コメントを投稿