恥は/dev/nullへ by 初心者

プログラミング素人がのろのろと学んだことをつづっています♪

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と同じように使って問題なさそうです。