前回の記事で行った実験から、MQL4の判定文について、C言語と同様に0以外は「真」として扱われることが分かりました。
そこで、0が「偽」として扱われることをfor文に利用できるか実験してみました。
for文の実験結果
void OnStart(){ for(int i = 3; i; i--){ printf(IntegerToString(i)); } }
上述のScriptを実行してみると、以下のように出力されました。
1 2 3
MT4のエキスパートでは、古いものが下の方に、新しいものが上の方に表示されるので、「3 → 2 → 1 」という順で表示されています。
さて、判定部分は「 i 」のみとしました。上記の出力結果から「 i = 0 」となった時点でforループが終了していることが分かりますね。
このことを利用するとfor文の記述方法を工夫することができそうです。
【余談】0以外が「真」になるのなら・・・?
void OnStart() { int a = 5; int b = 7; int Z = 23; if(a < b && Z) Print("真どすえ"); else Print("偽どすえ"); }
0以外が「真」になるのなら、上述のコードは「真」になるはずです。
結果は・・・
真どすえ
次に、Z の値を0にすると・・・
void OnStart() { int a = 5; int b = 7; int Z = 0; if(a < b && Z) Print("真どすえ"); else Print("偽どすえ"); }
結果
偽どすえ
【余談】短く書けるけれど意図が分かりにくいかも?
0 割りを防ぐためのコードも短く書けます。ただ、冗長に書いた場合に比べると、私のようなプログラミング初心者には意図が見えにくい面もあります。
void OnStart() { int num1 = 3; double num2 = 18.66; double res = 10.0; if(num1) res = num2 / num1; // 前行は以下のコードと同じ // if(num1 != 0) res = num2 / num1; Print(res); }
結果
6.22