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

MQL5でEA作ろう講座

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

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

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

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

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

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

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

今回は 三項演算子についてお話ししたいと思います。

・・・が!その前にあらかじめお断りしておくと、プログラミング初心者の方は正直今回の記事は読み飛ばしても構いません。

理由はif文 - else文でまったく同じような処理を行う記述が可能だからです。

ネット上に公開されているソースコードでも三項演算子を使っている例は多くありません。

MQL4や他のプログラミング言語を経験したことがある方ならともかく、初心者の方にとっては、ただでさえ色んな事を覚えなくてはいけない中で、わざわざあまり使われていない記述知識を身につけるのは大変な重荷です。

余裕がある方、大変さより興味の方が勝る方のみご覧いただければ結構です。

「じゃあ、そもそも書かなければいいじゃないか!(; ・`д・´)」

と思われる方もいるかもしれませんが、私としてはそれはしたくなかったんです。

このサイトでは、ただ単に「最速でEAを作る」ことを目的とするのではなく、訪問者の方がMQL5を一つのプログラミング言語として網羅的に調べられるようにしたい!という想いがありました。

私は2021年から、MQL4とMQL5を学び始めましたが、それまで他のプログラミング言語は触った事さえありませんでした。

だから、いざMQL5を学ぼうとしても1から網羅的に学べるような情報が殆どなかったんです(講座記事の第0回でも書いていますが、それがこのサイトを作るきっかけでした)

また、確かに三項演算子はあまり使われる頻度は高くない一方で、MQL5公式リファレンスで公開されている膨大な記事群や、標準ライブラリーには普通に使われている構文でもあります。

三項演算子の知識があれば、それらの恩恵を受けることができるので、初心者の方がある程度知識がついたときに、再度この記事に戻ってきてくれることを願って書いています。

では、前置きが長くなりましたが、三項演算子の説明に入ります。

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

三項演算子(ternary operator)とは?

if文の講座記事でも軽く触れましたが、

三項演算子 if文 や else文と同じく、条件演算子(~したら・・・する、という条件と処理を担う記述群)の1つになります。

具体的にコードで見ていきましょう↓

void OnStart()
  {
      //変数「varBool」を宣言し、true を代入
      bool varBool=true;
      
      //三項演算子の結果を格納する変数「result」を宣言し、falseを代入
      bool result=false;
      
      //三項演算子の結果を格納
      result=varBool? true:false;
      
      //ログ出力
      Print(varBool);
      
      //trueがログ出力される

  }

サンプルコードの中の、

varBool? true:false;

の部分が三項演算子です。

順にみていきましょう。

三項演算子(ternary operator)の記述方法

三項演算子は3つのセクションで構成されています。

最初のセクションは

varBool?

の部分です。

最初のセクションでは、条件文(「正しい(true)か 「正しくない(false)」かを判定する値・算式)を記述します。if文if()にあたる部分ですね。

文章で説明すると

条件判定に使う値、もしくは算式を書き、その右にクエスチョンマーク(?)を記述する

ということになります。

varBool?
//↑変数「varBool」を条件判定に使う要素に設定

2つ目のセクションが

true:

の部分です。

ここでは最初のセクションで記述した条件文が「正しい(true)」だった場合の実行内容を記述します。

実行内容の記述が終わったら、コロン(:)で区切ります。

varBool?true:
//↑変数「varBool」を条件判定に使う要素に設定
//条件判定が「true」だったら、右辺の値をtrueにする。

最後のセクションは、

false;

の部分です。

ここでは最初のセクションで記述した条件文が「正しくない(false)」だった場合の実行内容を記述します。

このセクションで、三項演算子の記述は終了なので、締めくくりにセミコロンを置きます。

varBool?true:false;
//↑変数「varBool」を条件判定に使う要素に設定
//条件判定が「true」だったら、右辺の値をtrueにする。
//条件判定が「false」だったら、右辺の値をfalseにする。

改めて、日本語訳にしてまとめると

「もし、varBoolの値が「true」だったら、右辺の値をtrueにする。「false」だったら、右辺の値をfalseにする。」

という意味になります。

変数「varBool」にはtrueが代入されているので、必然的に右辺の値は「true」となり、左辺の変数「result」に代入される値は、「true」になる

という流れです。

同じ内容をifelse文を使って書くとこうなります。↓

//もしvarBoolの値がtrueなら、変数resultにtrueを代入する。
if(varBool==true)result=true;
//そうでないなら(varBoolの値がfalseなら)、変数resultにfalseを代入する。
      else result=false;

ifelse文で記述すると、記述が2行になります。

このように、

三項演算子のメリットは、ifelse文に比べて記述するボリュームを少なくできることです。

とはいえ、繰り返しになりますがifelse文でも同じ処理を行う記述はできる訳なので、無理して使うものでもありません。最終的には記述や使い勝手の好みでどちらの記述方法を選択するかは決めればよいと思います。

まとめ

今回は 三項演算子 について解説しました。

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

  • 三項演算子if文 や else文と同じく、条件演算子(~したら・・・する、という条件と処理を担う記述群)の1つである。

  • 最初のセクションでは、条件文(「正しい(true)か 「正しくない(false)」かを判定する値・算式)を記述する。

  • その際、最初に条件判定に使う値、もしくは算式を書き、その右にクエスチョンマーク(?)を記述する

  • 2つ目のセクションでは、最初のセクションで記述した条件文が「正しい(true)」だった場合の実行内容を記述する。

  • その際、実行内容の記述が終わったら、コロン(:)で区切りを入れる。

  • 最後のセクションでは、最初のセクションで記述した条件文が「正しくない(false)」だった場合の実行内容を記述する。

  • 三項演算子のメリットは、ifelse文に比べて記述するボリュームを少なくできることだが、言い換えればifelse文でも同じ処理をする記述ができるということなので、無理して使う必要はない。

今回は以上になります。

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

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

            →【超入門】MQL5 EA講座 第37回「switch文」【EAの作り方】

コメント

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