スポンサーリンク
ホーム » MQL5でEA作ろう講座 » 【超入門】MQL5 EA講座 第35回「else文について」【EAの作り方】
a

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

MQL5でEA作ろう講座
スポンサーリンク

※【おススメのMT5MQL5対応のFX業者】

-<PR>-

※【おススメのMT5MQL5対応のFX業者】

MQL5にて開発した、MT5EAを実運用するにあたり、

当サイトでは以下のFX業者をおススメいたします。

外為ファイネスト

EAの利用制限なし。スキャルピングもOK

外為ファイネストに関する記事はコチラ

アヴァトレードジャパン

自動売買界最狭スプレッド水準

アヴァトレードジャパンに関する記事はコチラ

—————————————————————

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

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

  • if文は「~したら・・・する」という条件演算子の1つである。

  • if文は()内に書かれている記述について「正しい(true)」か「正しくないか(false)」の判定を行い、「正しい(true)」の場合に{}内の記述を実行する。

  • if文において、{}内の処理内容が、一つの記述式(=セミコロンで締めくくる記述式が一つだけ)で完結するなら{}の省略が可能

  • {}を省略した場合、if文の条件が有効になるのはif()の後の、最初の記述式のみ

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

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

else文if文とセットで使われる、プログラミングの条件分岐を担う重要構文です。

今回も丁寧な解説を心がけていますので、バッチリ理解してEA開発への道のりを1歩進めていきましょう。

「true」や「false」といったbool型 についての扱い方や理解がまだよくわからないという方は以下の記事をご覧ください。

スポンサーリンク

else文 とは?

そもそもの、else という英単語は

「そのほかの、別の」という意味を表す副詞であり、else文 もその意を組んだ処理文となっています。

else文 は if文と連動して使う記述

で、端的に言えば

if文の内容が「正しくない(false)」と判定された場合に、それを受けて発動する記述

になります。

従って、else文単独で記述することはありません。

単独で記述していた場合、illegal ‘else’ without matching ‘if’「対応するifがない不適切なelseです」というコンパイルエラーが発生してしまいます)↓

ifの()内に記載されている条件が「正しくない(false)」である場合、それを受けてelse文が発動します。


void OnStart()
  {

   //変数「varBool」を宣言し、falseを代入
   bool varBool=false;
   
   //varBoolがtrueなら
   if(varBool==true)
   {
   //trueとログ出力する
   Print(true);
   }
   
   //そうでないなら(=varBoolがfalseなら)、falseとログ出力する
   else Print(false);
     


  }
//+------------------------------------------------------------------+

変数「varBool」には、falseが代入されています。

従って、

if(varBool==true)

という条件文は「正しくない(false)」となり、if文の{}内容は執行されません。

if文の条件が「正しくない(false)」であったことを受けて、初めてelse文のコード記述が判定・執行されます

「そうでないなら(=varBoolがfalseなら)」

という条件に合致しているので、、執行内容である、

Print(false);

が執行されます。

※なお、elseの後の、執行文記述についてはif文と同じく、

{}内の処理内容が、一つの記述式(=セミコロンで締めくくる記述式が一つだけ)で完結するなら{}の省略が可能

となっています。今回のサンプルコードのような

Print(false);だけ、といった場合ですね。

執行内容記述が複数文ある場合は、{}が必要となります。↓


void OnStart()
  {

   //変数「varBool」を宣言し、falseを代入
   bool varBool=false;
   
   //varBoolがtrueなら
   if(varBool==true)
   {
   //trueとログ出力する
   Print(true);
   }
   
   //そうでないなら(=varBoolがfalseなら)、falseとログ出力する
   else
   {
   //falseとログ出力する
    Print(false);
    //falseとコメント出力する
    Comment(false);
   } 


  }
//+------------------------------------------------------------------+

elseの執行文、

Print(false);に

Comment(false);

を加えたいので、{}を用いて、処理記述全体を挟みました。

else文を使わずに記述しようとすると条件文記述は

if(varBool==false)

になる訳ですが、else文を使う事によって条件文を具体的に記述する事を省略できます。

ここまでが、else文の基本なのですが、ここまで見て頂いたのは

if文else文を用いた、条件分岐が2つの場合の記述

です。

もしAの条件だったら、~する。Aの条件じゃなかったら・・・する。

というパターンですね。

今度は条件分岐が3つ以上になった場合の、if文else文の使い方を見てみましょう。

スポンサーリンク

条件分岐が3つ以上ある場合の記述 -else if文-

条件分岐が3つ以上ある場合、if と else の合成演算子である、

else if

というキーワードを合わせて用いることで記述をしていきます。↓

void OnStart()
  {

//変数「varStr1」を宣言し、"horse"を代入
   string varStr1="horse";


//varStr1がrabbitなら
   if(varStr1=="rabbit")
     {
      //rabbitとログ出力する
      Print("rabbit");
     }

//そうでなく(=varBoolがrabbitなく)、
//varStr1がFoxなら
   else
      if(varStr1=="Fox")
        {
         //Foxとログ出力する
         Print("Fox");
        }
        
//どちらでもない(=varStr1がrabbitでもFoxでもないなら)
      else
         Print("Not rabbit or Fox");


  }

今回のサンプルコードにおいて、条件判定の材料とされているのは、

string型の 変数「varStr1」です。

「varStr1」には、文字列 ”horse” が代入されている状態です。

最初のif文条件

if(varStr1==”rabbit”)は正しくないので、if文の{}内容

Print(“rabbit”);

は執行されません。

if文の条件否定を受けて、今度は

else ifの条件判定に移ります。

else ifの条件

(varStr1==”Fox”)は正しくないので、の{}内容は執行されません。

if文else ifの条件否定を受けて、最後は

else

条件判定に移ります。

elseの条件は明示的に記述されていませんが、読み解くと

(varStr1がrabbitでもFoxでもないなら)

ということになりますが、この内容は正しい(=true)です。

従って、{}内容

Print(“Not rabbit or Fox”);が執行されます。

サンプルコードの例は、条件分岐が3つの例でしたが、条件分岐が3つ以上の場合はelse ifの数を増やすことによって、対応します。

void OnStart()
  {

//変数「varStr1」を宣言し、"horse"を代入
   string varStr1="horse";


//varStr1がrabbitなら
   if(varStr1=="rabbit")
     {
      //rabbitとログ出力する
      Print("rabbit");
     }

//そうでなく(=varBoolがrabbitなく)、
//varStr1がFoxなら
   else
      if(varStr1=="Fox")
        {
         //Foxとログ出力する
         Print("Fox");
        }

//そうでなく(=varBoolがrabbitなく、Foxでもなく)、
//varStr1がlionなら
   else
      if(varStr1=="lion")
        {
         //lionとログ出力する
         Print("lion");
        }
        
//どちらでもない(=varStr1がrabbitでもFoxでもlionでもないなら)
      else
         Print("Not rabbit or Fox or lion");


  }

条件分岐が4つになり、

という記述構成に変わりました。

else ifは必ず、if文より後に記述されなくてはいけませんし、else文より前に記述されなくてはいけません。

また

if文else ifが連なる記述だからと言って、最後に必ずelse文の配置が必須という訳ではありません。

else文はあくまで、「if文else if全てが否定された時に執行される記述」であり、if文else if全てが否定された時に執行される記述」自体が必要なければ文法的には問題ないですし、コンパイルエラーが発生することもありません。↓

void OnStart()
  {

//変数「varStr1」を宣言し、"horse"を代入
   string varStr1="horse";


//varStr1がrabbitなら
   if(varStr1=="rabbit")
     {
      //rabbitとログ出力する
      Print("rabbit");
     }

//そうでなく(=varBoolがrabbitなく)、
//varStr1がFoxなら
   else
      if(varStr1=="Fox")
        {
         //Foxとログ出力する
         Print("Fox");
        }

//そうでなく(=varBoolがrabbitなく、Foxでもなく)、
//varStr1がlionなら
   else
      if(varStr1=="lion")
        {
         //lionとログ出力する
         Print("lion");
        }
        
/*varStr1にはhorseがはいっておらず、else文もない為、
このままだと何のログ出力もされないが、そういう意図でプログラミング
しているのであれば問題ない*/
     


  }
スポンサーリンク

おまけ

else ifはともかく、

else文は先述した通り、

条件内容を明示的に記述しないため、条件判定に詰めの甘さを残す場合、else文の記述箇所が原因で、意図しない動作を引き起こしがちです。

条件分岐の数が多いときに、日本語で「あれでもなくて、これでもなくて・・・」みたいな思考で整理をしようとするのは間違いのもとです。

あくまで、

else文の前に記述されている if文 や else ifの条件が全てfalseの場合に執行される

というelse文の大前提を押さえたうえで、コメントアウト箇所に、else文の条件内容を具体的に記載して条件を視認・整理できるようにおくなどの対策を取り、慎重に開発を進めた方が良いと思います。

あるいは、いっそのこと最初のうちは、else文を使わず、多少コードが冗長になっても、

if文と else ifだけで全ての条件分岐が明示的に記述されるように構成していく、というのも一つの手段かと思います。

スポンサーリンク

まとめ

今回は else文 について解説しました。

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

  • else文if文の内容が「正しくない(false)」と判定された場合に、それを受けて発動する記述である。

  • 条件分岐が3つ以上ある場合、if と else の合成演算子である、「else if」というキーワードを合わせて用いる

  • else ifは必ず、if文より後に記述されている必要があり、else文より前に記述されている必要がある。

  • if文else ifが連なる記述だからと言って、最後に必ずelse文の配置が必須という訳ではなく、「if文else if全てが否定された時に執行される記述」が必要なければ省略可。

今回は以上になります。

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

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

【超入門】MQL5 EA講座 第36回「三項演算子(ternary operator)」

—————————————————————

-<PR>-

※【おススメのMT5MQL5対応のFX業者】

MQL5を使って自作したEAシステムトレードに利用するには、取引プラットフォームとしてMT5を提供しているFX会社に口座を開設しなくてはいけません。

当サイトでは以下のFX会社での口座開設・EA運用をおススメしています。

おススメする理由の詳細につきましては、各FX会社について解説する記事を書いておりますので、下記のリンク記事を参考にしていただければと思います。


外為ファイネスト

EAの利用制限なし。スキャルピングもOK

外為ファイネストに関する記事は↓をご覧ください。

アヴァトレードジャパン

自動売買界最狭スプレッド水準

アヴァトレードジャパンに関する記事は↓をご覧ください。

関連用語リンク集

MQL5FX関連の用語リンク集です。
当サイトでは、元々わからない言葉や概念に出くわしたら、すぐその言葉に立ち戻れるよう、かなり細かく内部リンクを張り巡らせており、多様な用語を網羅しています。

興味のある内容に直接アクセスし、疑問の解決にお役立ていただければと思います。

スポンサーリンク
MQL5でEA作ろう講座
スポンサーリンク
シェアする
エムキューエルをフォローする
スポンサーリンク
【超入門】MQL5 でEAを作ろうブログ

コメント

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