do-while文とは?
「繰り返し処理」命令をする記述の1つです。
名前を見てもらえば、わかる通り while文 の派生形といった方が良いかもしれません。
while文との違いを確認しつつ、使い方を見ていきましょう。
while文とdo-while文の違い
do-while文の記述構成は以下のようになっています↓
do
{
//ループ中に行う処理を記述
}
while(ループ継続の条件)
doキーワードを最初に書くことによって、
これからdo-while文を使用する、という宣言になります。
その後、
{}の中にループ中に行う処理を記述をしていきます。これはwhile文と同じですね。
while(ループ継続の条件)
while文は(ループ継続の条件)が最初に来ているのに対し、do-while文は最後に来ています。
これが何を意味するかというと、do-while文は、
記述した、ループ中に行う処理を最低1回は必ず実行する
ということです。
void OnStart()
{
//ループカウント用の整数型変数「counter」を用意
int counter=1;
//do-while文を使うという宣言
do
{
//ログ出力
Print(counter);//1,2,3,4,5が出力される
counter++;
}while (counter<=5);
}
while文をdo-while文に変更した以外は、前回の記事後半で扱ったサンプルコードと同じです。
Print関数で得られるログ出力の結果も同じです。
でも、もしこれが変数「counter」の値が6だとするとどうでしょう?
while文の場合、
void OnStart()
{
//ループカウント用の整数型変数「counter」を用意
int counter=6;
//counterが5以下である間はループする。
while (counter<=5)
{
//ログ出力
Print(counter);//処理が行われないのでログが出力されない。
counter++;
}
}
//+------------------------------------------------------------------+
コメントアウトしている部分に書いているように、ループ継続の条件である
(counter<=5)を満たしていないので、{}内の処理は一度も実行されず、チャートにプログラムを挿入してもログ出力されません。
一方、do-while文の方はどうかというと・・・
void OnStart()
{
//ループカウント用の整数型変数「counter」を用意
int counter=6;
//do-while文を使うという宣言
do
{
//ログ出力
Print(counter);//一度だけdo{}内の処理が実行されるので、6が出力される
counter++;
}while (counter<=5);
}
(counter<=5)というループ継続の条件は同じですが、
do-while文は条件判定を最後に行うので、一度だけdo{}内の処理を行います。
結果 「6」が出力される、という流れです。
動画にしてみましたので、ご覧ください。↓最初にチャートに挿入しているのがwhile文、次にチャートに挿入しているのがdo-while文です。
do-while文を使う時の注意点 -無限ループについて-
while文の時にも書いたことですが、do-while文に関しても、
ループを終了させる条件記述がなかったり、記述が適切でなかった場合、ループが終了せずに無限ループになってしまう可能性があります。
void OnStart()
{
bool loopCondition=true;
int counter=0;
//do-while文を使うという宣言
do
{
//ログ出力
Print(counter);
counter++;
}while (loopCondition==true);
}
ループ継続の条件が(loopCondition==true)であるにも関わらず、{}内にloopConditionをfalseにする記述がないので無限ループになってしまいます。↓
ループさせる回数が決まっていなかったり、ループ継続の条件に真偽値を指定したい場合は、while文やdo-while文を使ってもいいのですが、ループさせる回数が決まっていたり、より細かい設定と処理を行いたい場合は、次回取り上げる予定のfor文を使うとよいと思います。
まとめ
今回は do-while文 について解説しました。
今回の記事では以下のことを学びました
- while文と同様に、ループを終了させる条件記述が{}内になかったり、記述が適切でなかった場合、ループが終了せずに無限ループになってしまう可能性があるので記述には注意する。
今回は以上になります。
最後までお読みいただきありがとうございました<m(__)m>
コメント