MQL5超入門(7)/三項演算子とは

昨日に引き続いて、MQL5 超入門です。
MQL4 を知っていて、C 等の他の言語を知らない人が MQL5 で他人のコードを読む時に戸惑う表現のひとつに、三項演算子があります。


具体例は、

double true_range = (High==Low) ? 0 : (Close-Open)/(High-Low);

で、この式は 変数 true_range に値を代入することが目的だと想像がつきますが、おそらく右辺が意味不明でしょう。


MQL4 で、ほぼ同等の結果を得るには、以下のように書きます。

double true_range;
if(High==Low)
{
  true_range = 0;
}else{
  true_range = (Close-Open)/(High-Low);
}

これで推測できると思うのですが、最初の式は、

double true_range = (High==Low) ?                  0 : (Close-Open)/(High-Low);
double true_range = 判定条件   ? 真の時に代入する値 : 偽の時に代入する値     ;

という意味を示していて、

判定条件が、High==Low
真の時に代入する値が、0
偽の時に代入する値が、(Close-Open)/(High-Low)

という3項をで区切って出来上がっているので、三項演算子といいます。


この三項演算子入れ子にすることが出来るので、

double x_range = 条件A ? 1 :(条件B ? 2 :(条件C ? 3 :0 ));
↓分かり易く改行して書くと…
double x_range = 条件A ? 1 :
                 条件B ? 2 :
                 条件C ? 3 :
                         0 ;

と書くこともあります。
この式の意味は、条件Aを満たしたら 1 ,条件Bを満たしたら 2 ,条件Cを満たしたら 3 ,それ以外は 0 を代入する。になります。
(三項演算子入れ子にする場合は、改行して書きましょう..)


if ( ){ } else { } よりスマートに書けそうだと感じた人は使ってみてもよいかもしれません。