MQLの判定文はC言語と同じように動くのか?
MQLの勉強に役立つので、CやC++の本をたまに寝っ転がって読んでいます。
Cの本を読んでいたら、if文やfor文の判定条件について、0以外は「真」として扱われるという記述がありました。
そこで、MQL4でも同じ仕様になっているのかScriptを使って調べてみました。
1.整数型の実験結果
void OnStart() { if(0) Print("0だよん"); else Print("elseだよん"); }
結果
elseだよん
void OnStart() { if(1) Print("1だよん"); else Print("elseだよん"); }
結果
1だよん
void OnStart() { if(-1) Print("-1だよん"); else Print("elseだよん"); }
結果
-1だよん
void OnStart() { if(2) Print("2だよん"); else Print("elseだよん"); }
結果
2だよん
void OnStart() { if(3150) Print("3150だよん"); else Print("elseだよん"); }
結果
3150だよん
以上の結果から、整数値に関し、0以外は「真」として扱われているようです。
2.浮動小数点数型の実験結果
void OnStart() { double a = 0.0; if(a) Print("aだよん"); else Print("elseだよん"); }
結果
elseだよん
void OnStart() { double a = -1.0; if(a) Print("aだよん"); else Print("elseだよん"); }
結果
aだよん
浮動小数点数値に関しても、0以外は「真」として扱われているようです。
3.否定( ! ) の挙動はどうなるのかな?
void OnStart() { int a = 0; int b = 1; int c = 2; Print("!a: ", !a); Print("!b: ", !b); Print("!c: ", !c); }
結果
!a: true !b: false !c: false
void OnStart() { int b = 0; if(!b) Print("bだよん"); else Print("elseだよん"); }
結果
bだよん
void OnStart() { double b = 0.0; if(!b) Print("bだよん"); else Print("elseだよん"); }
結果
bだよん
void OnStart() { int c = 2; if(!c) Print("cだよん"); else Print("elseだよん"); }
結果
elseだよん
void OnStart() { double c = 2.0; if(!c) Print("cだよん"); else Print("elseだよん"); }
結果
elseだよん
void OnStart() { double d = -1.0; if(!d) Print("dだよん"); else Print("elseだよん"); }
結果
elseだよん
4.TRUE, True, true と FALSE, False, false
MQLでは、TrueとFalseに関して3種の表記があります。 いずれもMetaEditorに入力すると色が変わるので予約語になっているようですが、違いはあるのか調べてみました。
void OnStart() { Print("TRUE : ", TRUE); Print("True : ", True); Print("true : ", true); Print("FALSE: ", FALSE); Print("False: ", False); Print("false: ", false); }
結果
TRUE : 1 True : 1 true : true FALSE: 0 False: 0 false: false
上記の結果から、全て小文字のtrueとfalseだけちょっと違うように見受けられます。
これらをif文に入れた場合、どのように機能するのか調べました。
void OnStart() { if(true) Print("uho"); else("elseだよん"); }
結果
uho
void OnStart() { if(false) Print("uho"); else Print("elseだよん"); }
結果
elseだよん
この結果から見ると、TRUE, True, FALSE, Falseと同じように使って問題なさそうです。