while命令
while命令は与えられた条件式がtrueである間は配下にあるブロックに書かれた処理を実行します。
while(条件式){
命令;//条件式がtrueであり続ける場合に処理する
}
1~5までを出力するのにはこのようにします。
int i = 1;
while(i < 6){
Console.WriteLine(i +"番目のループです");
i++;
}
do while命令
do while命令も与えられた条件式がtrueである間は配下にあるブロックに書かれた処理を実行します。
do{
命令;//while命令に書かれた条件式がtrueの場合に処理する
}while(条件式);
1から5の数値を表示するためには以下の様になります。
int i = 1;
do{
Console.WriteLine(i + "番目のループです");
i++;
}while(i < 6);//このセミコロンは必須
while命令とdo while命令に共通の補足
無限ループに注意
無限ループとは永遠に終了することのない、条件式の判定が常にtrueになってしまいwhile(do while)の条件がfalseとなることないため、ループから抜け出せない状態を指します。
whilie命令のサンプルから4行目の「i++」を削除若しくはコメントアウトしてみると分かるかと思います。常にカウンタiが1のままでwhileの「i < 6」を満たしてしまい、ループから抜け出せなくなってしまいます。
無限ループが起きれば何が起きるか。下手したら、システムそのものを強制終了させるしか手がなくなります。
よって、while命令を作る際には必ずループを脱出するかどうかを確認する必要があります。
上の例だとカウンタiを確実に加算してiが6以上になることを確認します。
私はwhile命令を使用する時には必ずループ条件となるカウンタを先に条件を抜けるようにして、無限ループを塞ぐようなコードを書きます。
while命令とdo while命令の違い
上のwhile命令とdo while命令では同じ結果が返ってきますが、異なる部分もあります。
それは、while命令で判定する条件式の扱いにあります。
while命令では先に条件式の判定(前置判定)を行いますが、do while命令ではdoブロックに囲また文を実行した後に条件式の判定(後置判定)を行います。従って,while命令では条件式は先に判定するので、最初に条件式を満たさなければ何もしません。一方do while命令では後から判定するのでdoブロック句で囲まれた部分の処理をした後条件式の判定を行います。
上のサンプルにおいて1行目の「i = 1」を「i = 6」に変更すればどうなるか。
while命令の場合、画面に何も表示されませんが、do while文の場合「6番目のループです」と表示されます。
まとめ
今回は繰り返し処理としてwhile命令と、do..while命令を学びました。どちらも条件式がtrueの場合に処理を繰り返しますが、while命令とdo…while命令では条件式を比較する順番が異なるという違いがあります。
また、共通することですが、条件式の書き方や処理の仕方によっては無限ループを発生させかねないという欠点があります。そうならないように条件式がいつかはfalseになるよう処理をコーディングする必要があることに注意してください。
コメント