for文制御
forによるループ
whileとuntilを前回では学習しました
しかし、それ以外にもforステートメントという代表的なループ制御が存在します
forはwhileやuntilとは違い、最初にカウンター変数や条件式、カウント数をまとめて宣言します
for (カウンタ変数 = 初期値 ; 条件式 ; 繰り返すことのカウント数) {
statements;
}
という書式になります
whileやuntilではループ内でやっていたカウント処理を宣言時にできるので、ソースはまとまりやすいです
とくに無限ループである必要がない場合は、forでループを作ったほうがすっきりするかもしれません
print "繰り返す回数を入力してください\n";
$count = <STDIN>;
chomp($count);
for ($re = 0 ; $re <= $count ; $re++) {
print "$re回目です\r";
}
やはりこの場合も、カウンターの初期値が0なので5を入力しても 0から数えて実質6回繰り返す ことを忘れないで下さい
for ($re = 0 ; $re <= $count ; $re++) { に注目してみましょう
$re = 0 | はカウンターとなる変数です。ここでカウンター変数を初期化しています
|
$re <= $count | では、$reが$countより小さい間、ループするということになります(つまり条件式が真のあいだ)
|
$re++ | はステップ数です、1度ループするたびにここが実行されます
|
以下のプログラムを作って研究してください
print "繰り返す回数を入力してください\n";
$count_max = <STDIN>;
print "カウンターの初期値を指定してください\n";
$count_def = <STDIN>;
print "ステップで加算する値を入力してください\n";
$step = <STDIN>;
chomp($count_max , $count_def , $step);
for ($re = $count_def ; $re <= $count_max ; $re += $step) {
print "$re回目です\r";
$count_step++;
}
print "\n終了しました\n合計で$count_step回繰り返しました";
ただし、このプログラムではエラー処理をしていないので理屈上おかしい数(負の数など)を代入すると暴走します
たとえば、繰り返す回数が10回で、カウンターの初期値が11であれば無限ループになり終われなくなります
また、$setpに負の数を代入するなどしても同じ現象が起こります
for ($count ; expr ; step) { statements }
ループの宣言、及び初期化を行ないます
$countにはカウンターとして使う変数を初期化します。これは一度だけ実行されます
exprには条件式を指定します。これが真の場合のみステートメントが繰り返されます
stepには繰り返すことにカウンターに加算する数を指定します。一般的にはインクリメントなどを使います