どーも、もんたです。
さっそく本日もプログラミングの勉強をしていきたいと思います。
さて、前回の記事ではPHPの繰り返し処理while文について学びましたが、今回も繰り返し処理を学びます。
今回学ぶのはfor文ですね。
同じような処理をするコードの書き方なんてそんなに何個も覚える必要あるのか?と思うかもしれませんが、今回学ぶfor文と前回学んだwhile文では用途も違います。
その辺りも含め、今回も引き続きPHPの繰り返し処理を学んでいきたいと思います。
for文とは?
for文とは、同じプログラム処理を繰り返し実行するためのコード。
for文を使えば、複雑な繰り返し処理もシンプル且つ簡潔にまとめることができる。
繰り返し処理を効率的に、より短く簡潔に書くという視点ではwhile文と同じように感じるかもしれないが、厳密に言えばそれぞれ違う用途で使える。細かい違いや用途は後述。
それでは、さっそくfor文の書き方について見ていこう。
for文の書き方
まずは以下の例。
for(初期値; 条件式; 増減式){
処理
}
このように、かなりシンプルな基本構文だ。
見て分かる通り、for文は()中に3つの前提事項を記述する。
それぞれ「初期値」に繰り返す値の定義、「条件式」に処理を繰り返すための条件、「増減式」に繰り返しの後処理を記述する。
そしてその間には、;(セミコロン)必須なので記述漏れのないよう注意。
では、この基本構文に実際の例を当てはめて見てみよう。
for($count = 0; $count <= 10; $count ++){
echo $count;
}
単純な例だが、上記では0〜10までの数字を繰り返し出力している。
細かく見ていこう。
まずは一つ目の「初期値」では、変数countに数字の0をあらかじめ代入されている。
変数宣言→代入のように記述。この作業がいわゆる初期化。
次の「条件式」では、「変数countが10以内だったら」という条件だ。
ここはfor文{}波括弧の中の繰り返し処理を実行するための条件を記述。
そして「増減式」では、繰り返し毎に変数countの値を1ずつ増えるようになっている。
繰り返す度に行う処理を記述。尚、「++」で1を足すという意味になる。
無限ループの書き方
では、for文では無限ループの心配は無さそう。
と思いきや、for文もwhile文と同様に、無限ループになる記述方法がある。
for(;;){
}
上記のようにfor文を記述すると、{}波括弧の中の処理が無限ループされる。
for文の()内の3項目は、空でも問題なく動作する構造になっている。
条件式が未記入の場合、真偽判定が常にTrue(真)になるため、常にfor文が実行されている状態となる。
尚、while文と同様、breakやcontinueとの併用もできる。
while文とfor文の違い
さて、これまで学んできたfor文だが、同じ繰り返し処理while文と何が違うのか。
まずは次のAさんとBさんのことを考えていただきたい。
「20歳になったら確実に医者になれる(明確)」
「資格試験に合格したら医者になれる(不明確)」
かなり大雑把で極端な例だが、このAさんとBさんが医者になるタイミングをコードで記述するならどのように記述するだろうか。
AさんBさん各々を、for文とwhile文で記述してみると理解が深まるはず。
まずAさんから見ていこう。
//for文
for($age = 0; $age < 20; $age ++){
echo "{$age}歳になりました";
}
echo "20歳で医者になれました";
//while文
$age = 0;
while($age < 20){
echo "{$age}歳になりました";
$age ++;
}
echo "20歳で医者になれました";
どちらでも記述することはできるが、より簡潔に分かりやすく記述されているのはどちらだろうか。
恐らくfor文の方がシンプルで書きやすいだろう。
Aさんのように先の時期(繰り返し回数)が明確な場合や、数字を用いる場合は、for文を用いることが一般的とされている。
では、次にBさんを見ていこう。
//for文
for($qua = "未取得"; ; ){
if($qua == "取得"){
echo "資格{$qua}したので医者になれました";
break;
}
echo "まだ資格{$qua}です";
}
//while文
$qua = "未取得";
while(True){
if($qua == "取得"){
echo "資格{$qua}したので医者になれました";
break;
}
echo "まだ資格{$age}です";
}
一応記述はできているが、無駄がなく正しいのはどちらだろうか。
Bさんに関しては、恐らくwhile文の方が綺麗で分かりやすいだろう。
Aさんとは逆に、先の時期(繰り返し回数)が不明確な場合や、文字列など任意のデータに切り替わるまでの繰り返し処理は、while文を用いることが一般的。
そもそも前提が違う
上記の例を見ても分かるかもしれないが、
更に掘り下げて言うと、AさんとBさんでは繰り返し処理を実行する前提が決定的に違うということだ。
Aさんは先が明確なのに比べて、Bさんは不明確。
つまり、Bさんは無限ループ前提で処理をしていることになる。
少し説明が下手くそなので申し訳ないが、
回数が明確ならfor文、回数が不明確ならwhile文で問題なさそうだ。
(もし間違っていたら、神の声としてご指摘をください)
まとめ
今回も無事に学ぶことができました。
頭が痛いです。
初心者の感想だと、for文ってシンプルでかなり書きやすい。
while文との違いも学んだので、それぞれ用途を使い分けて今後も使いまくっていこうと思います。
次は何をしよう。配列かな。。。
では、最後までご覧頂きまして、ありがとうございました。