第10章 同じ処理を繰り返そう
10.4 繰り返し文を制御する
プログラムの処理は、条件分岐や繰り返し処理を使うと制御できることは学習してきました。繰り返しの処理でも、途中で繰り返しを止めたい、ある条件でスキップしたいなどの制御を行いたい場合もでてきます。そのような途中で止めたい場合には「break文」、スキップしたい場合には「continue文」の2つが用意されています。
繰り返し処理自体を制御する仕組みについて学習していきましょう。
10.4.1 break文で繰り返し処理を途中で抜ける
break文は繰り返し処理のブロック内(下位ブロックも含む)でしか利用できません。ループを強制的に止めるための処理なので、基本的な使い方としては条件分岐文と組み合わせて利用します。
break文はあくまで繰り返し処理を抜けるだけなので、その後に処理があれば続きの処理を実施します。
書式:break文
for文を例にしたフローチャートを以下の図10.4.1に示します。
図 10.4.1: break文を含むfor文のフローチャート
break文を使ってfor文を途中で抜けるプログラム
for文内でbreak文を利用し、ある条件になると途中で抜けることを、Webブラウザから結果を表示して確認してみましょう。
ソース・フォルダー: myproj_intro/ch10
パッケージ: breakStatement.php
アクセスURL:http://localhost/myproj_intro/ch10/breakStatement.php
breakStatement.php
解説
7~14行目がfor文です。for文の条件だけ見ると、「$iを0から開始して1ずつ増やして、50未満まで繰り返し50回ループする」処理になっています。しかし、11行目のif文で$iが5ならばbreak文の処理が行われるので、結果的には「$iは0~5までの6回ループする」処理になります。
8行目の処理でループ毎の$iの値を表示し、11行目のif文もループ毎に判定しています。
15行で最後に$iの最終的な値の結果を画面に表示しています。繰り返し処理を抜けても、後の処理が行われていることも確認できます。
今回の実行結果から$iを順番に表示し、$iが5になったら繰り返し処理を抜けているのが確認できます。
今回のプログラムをフローチャートで表すと以下の図10.4.2に示します。
図 10.4.2: breakStatement.phpのフローチャート
ポイント
- 繰り返し処理を途中で止めるには、break文を利用する。
続いて次の項で繰り返し処理をスキップするcontinue文の仕組みを学習していきましょう。
10.4.2 continue文で繰り返し処理をスキップする
前項で学習したbreak文は繰り返し処理から抜けるものでしたが、continue文も「スキップする」と言われると、繰り返し処理を抜けるようなイメージに思えるかもしれませんがそうではありません。「スキップする」の正確な意味は、「繰り返し処理内のcontinue文以降の処理を全てスキップする」ことです。continue文もbreak文と同様に繰り返し処理内のみで利用でき、基本的には条件分岐文と組み合わせて利用します。
書式:continue文
for文を例にしたフローチャートを以下の図10.4.1に示します。
図 10.4.3: continue文を含むfor文のフローチャート
フローチャートを見ると分かりますが、continue文は繰り返し内の処理のみスキップして式3は必ず実行されることになります。
continue文を使ってfor文内の途中の処理をスキップするプログラム
for文内でcontinue文を利用し、ある条件になるとその途中の処理をスキップすることを、Webブラウザから結果を表示して確認してみましょう。
ソース・フォルダー: myproj_intro/ch10
パッケージ: continueStatement.php
アクセスURL:http://localhost/myproj_intro/ch10/continueStatement.php
continueStatement.php
解説
7~13行目がfor文です。for文の条件を見ると、「$iを0から開始して1ずつ増やして、10未満まで繰り返し10回ループする」処理になっています。今回は繰り返し処理内に、9~11行目の条件判定で「($i % 2)==0」と余剰の結果が0なのかを判定しています。つまり「カウンタ変数$iの値が2で割り切れる偶数数値なのか」を判定しています。偶数数値ならばcontinue文が実行され、12行目の処理は行われません。12行目の処理が行われるのは、奇数数値の場合になります。
14行で最後に$iの最終的な値の結果を画面に表示しています。繰り返し処理の中でスキップされても、後の処理が行われていることも確認できます。
今回の実行結果から、$iが奇数数値の場合メッセージが表示され、偶数数値の場合は処理がスキップされているのが正しく確認できます。
今回のプログラムをフローチャートで表すと以下の図10.4.4に示します。
図 10.4.4: continueStatement.phpのフローチャート
ポイント
- 繰り返し処理内で途中から残りの処理をスキップさせたい場合、continue文を利用すれば行える。
本節ではfor文の繰り返し文内を制御しましたが、他の繰り返し処理でもbreak文とcontinue文は利用でき、さらにbreak文とcontinue文の両方を組み込んだ、繰り返し文も設定できることを覚えておいてください。