【超入門】MQL5 EA講座 第39回「do-while文について」【EAの作り方】

MQL5でEA作ろう講座

前回while文 について解説しました。

改めて前回の内容をおさらいをしておくと、

  • while文は、プログラムに「繰り返し処理」命令をする記述の1つである。

  • while文を作る際は、while演算子を記述し、その後()内にループ継続を判定する条件を記述する

  • ()内にループ継続を判定する条件を記述した後は、{}内に、繰り返しておこなう処理内容を記述する。

  • ループ継続を判定する条件の記述は、真偽値を用いた記述以外に、関係演算子を用いた記述も可能である。

  • ループを終了させる条件記述がなかったり、記述が適切でなかった場合、ループが終了せずに無限ループになってしまう可能性があるため記述には注意

ということをお伝えしました。

真偽値についてはコチラ

関係演算子についてはコチラ

今回は do-while文 についてお話ししたいと思います。

スポンサーリンク
スポンサーリンク

do-while文とは?

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にする記述がないので無限ループになってしまいます。

もし、ループ継続の条件を(loopCondition==true)のような無限ループに設定する場合、この後

if文や、第41回「breakとcontinue」で解説予定のbreak演算子を用いて、{}内に特定条件を満たしたら、ループを抜ける記述をする必要があります。

break演算子については第37回「switch文」でも、軽く触れましたが、条件演算(if文else文switch文)や繰り返し構文(while文do-while文for文)で使われる{}内の処理を、途中で離脱する為に使われるものです。

詳しい事は第41回で解説予定なので、現時点であまりよくわからなくても大丈夫です。

ループさせる回数が決まっていなかったり、ループ継続の条件に真偽値を指定したい場合は、while文do-while文を使ってもいいのですが、ループさせる回数が決まっていたり、より細かい設定と処理を行いたい場合は、次回取り上げる予定のfor文を使うとよいと思います。

まとめ

今回は do-while文 について解説しました。

今回の記事では以下のことを学びました

  • while文は(ループ継続の条件)が最初に来ているのに対し、do-while文は(ループ継続の条件)が最後に記述されるので、do-while文は、ループ中に行う処理を最低1回は必ず実行する。

  • while文と同様に、ループを終了させる条件記述が{}内になかったり、記述が適切でなかった場合、ループが終了せずに無限ループになってしまう可能性があるので記述には注意する。

今回は以上になります。

最後までお読みいただきありがとうございました<m(__)m>

【超入門】MQL5 EA講座 第38回「while文について」

【超入門】MQL5 EA講座 第40回「for文について」【EAの作り方】

コメント

タイトルとURLをコピーしました