[前へ]   [目次へ]   [次へ]

各ループの得意条件(C/C++)

今回は、前回、前々回で紹介した三種類のループの得意とする条件について解説します。


for

for ループは、「初回式」「続行式」を持つため、特定回数実行するループに向いています。
つまり、「ループ突入前にループすべき回数がなんらかの形で判明している」ケースを得意とします。
続行式も普通の式扱いなので、加減乗除でもでもなんでも使えます。
ループカウンタと関係ない処理を行うこともできますが、
ソースが読みにくくなりやすいのであまりやらない方がいいです。
ループ紹介時のサンプルは「3回ループする」とあらかじめ分かっているため、 for が非常に有効でした。
また、文字列制御においても、継続条件を工夫すれば、 for が有効に利用できます。


while

while ループは単純なループを実行します。
for とは逆に、カウンタを回す意味の無い「ループ突入前にループすべき回数が不明」な条件に向きます。
これは、例えば「ユーザーが終わりを入力するまでループする」とか
「テキストファイルを一行ずつ全部読む」「ループ内の状況で終了タイミングが変化する」等があります。
テキストファイルの行数は事前に分かるように思うかもしれませんが、
テキストファイルの行数はファイルを全て読まないと行数を数えることができないので、
ファイルを読み込む前にはわからないということです。


do

do ループは初回の条件判定のない while ループを実行します。
do は「初回無条件に実行されなければならない処理」が向いています。
しかし、 do は継続条件がループの最後にあるため、継続条件が読みにくく、
ブロックが大きいと一画面に表示できなくなってしまいます。
唯一の「初回無条件実行」も初回条件がパスするようにしておけば while でも問題ないため、
do はあまり出番のないループとなります。


ところで、無限ループというものがあります。
無限ループはその名の通り、永遠に継続条件判定が真になり続けるループで、そのままだと永遠に終わりません。
うっかり無限ループを作ってしまうとプログラムが終了せず、一切の操作も受け付けない状態、
いわゆる「暴走」「フリーズ」「ハングアップ」と呼ばれる状態になります。

Windowsのコンソールアプリケーションはこのような状態になってもウィンドウの操作は可能で、
Ctrl+Cを用いてプログラムブレークシグナルを投入することもできます。
これはウィンドウの制御などはシステムがやってくれているためで、その部分には影響しないのです。

しかしWindowsプログラムではウィンドウの制御なども自分のプログラムの一部として動作しているので、
Windowsプログラムでこれをやると本当にフリーズしてしまいます。
WindowsXPではしばらくするとシステムが別のプログラムを起動し、
フリーズしていると思われるプログラムのウィンドウを奪い取り(笑)、移動と最小化と強制終了だけは回復されます。
その後本来のプログラムが復帰するとウィンドウは本来のプログラムに返され、別に起動されたプログラムは終了します。


これは処理時間が長い処理を行った時も同様です。
それを避けるために長い時間の掛かる処理を行う時はフリーズしたようにならないように処置が取られています。
が、それは今触れるような内容ではないので今は解説しません。


と、このように問題アリアリに見える無限ループですが、無限ループは結構使えます。
無限ループを用いる時はコード内に break や return を仕込んでおき、なんらかの方法で脱出できるように仕込んでおきます。
break と continue については次節で、 return については関数の項にて解説する予定です。
break などは if で条件を付けておけば、ループの終了タイミングを柔軟に制御できるので、結構便利です。
一歩間違えば本当に無限ループしてしまいますが、それさえ気を付けていればかなり使える構文となります。


今回は三種類のループが得意とする条件について解説しました。
しかし、どのループでも記述すること自体は可能なので、
最終的にどのループを使用するかは都度考える必要があります。

慣れてくれば特に意識しなくても選択できるようになりますが、
最初のうちは適切なものがどれかをしっかり考えるようにしてください。


次回は break と continue についてです。

[前へ]   [目次へ]   [次へ]

プログラミング講座 総合目次

最終更新 2008/10/17