English

MQL5の書き方(for MQL4デザイナー)

 

2024.02

林貴晴/AMSER Inc.

多岐分岐の扱い方

一般的に条件分岐にはif文が用いられますが、複数の条件を扱う場合、コードが複雑になりがちです。今回紹介するswitch文とcaseラベルの組み合わせを使うことで、複数の条件分岐を簡潔に記述することができます。

Switch - caseの基本形

switch (値) {
  case 定数1:
    // 処理1
    break;
  case 定数2:
    // 処理2
    break;
  // 他のcaseラベルを記述
  default:
    // どのcaseにも一致しない場合の処理
    break;
}
                    
 

値が定数1と同じ時 処理1が動作します。
breakを記述することで、処理2が動作しないようにします。
全ての定数と条件が合わなかった時にdefaultの処理が動作します。
※caseの定数には変数、関数は使用できません。

使用例

int value = 2;
   switch (value)
      {
      case 1:
         Print("Value is 1");
         break;
      case 2:
         Print("Value is 2");
         break;
      case 3:
         Print("Value is 3");
         break;
      default:
         Print("Value is not 1, 2, or 3");
         break;
      }
                    
 

解説)この例では、valueが2であるため、"Value is 2"が出力されます。1、2、3以外の値の場合は、"Value is not 1, 2, or 3"が表示されます。

 
フォールスルー(fallthrough)の利用

MQL5のswitch文では、意図的にbreak文を省略して複数のcaseを連続して実行させることができます。これにより、複数の条件で同じ処理を実行したい場合にコードをシンプルに保つことができます。

フォールスルーの例

int dayOfWeek = 5; // 週の日を表す数値(例:5は金曜日)

switch(dayOfWeek) {
  case 1: // 月曜日
  case 2: // 火曜日
  case 3: // 水曜日
  case 4: // 木曜日
  case 5: // 金曜日
    Print("平日です。");
    break;
  case 6: // 土曜日
  case 7: // 日曜日
    Print("週末です。");
    break;
  default:
    Print("無効な日です。");
    break;
}
                    
 

この例では、月曜日から金曜日(1から5)までの場合、"平日です。"と出力し、土曜日と日曜日(6と7)では"週末です。"と出力します。フォールスルーを使用することで、同じメッセージを出力する複数のcaseに対して、コードの重複を避けることができます

 
switch文とif文の比較

switch文を使用すると、多くの条件分岐があるコードの可読性を向上させることができます。各caseは独立しているため、どの条件がどの結果につながるのかが明確になります。一方、if - else文は条件が増えるとネスト(入れ子構造)が深くなり、コードの追跡が難しくなることがあります。

switch文を使用する場合は、break文を忘れると予期せぬフォールスルーが発生するリスクがあります。これは、意図せずに次のcaseに処理が移行してしまうことを意味します。

switch文は比較する値が固定値に限られるため、変数や関数を利用する場合には、if - else文の方が柔軟に対応できます。

処理速度はswitch文がif文よりも速いとされますが、MQL5で行ったベンチマークテストでは両者の速度が非常に速く、実際の差を計測することができませんでした。

int colorCode = 2;

switch (colorCode)
   {
   case 1:
      Print("赤");
      break;
   case 2:
      Print("青");
      break;
   case 3:
      Print("緑");
      break;
   default:
      Print("未定義の色");
      break;
   } 
int colorCode = 2;

if (colorCode == 1)
   {
   Print("赤");
   }
else if (colorCode == 2)
   {
   Print("青");
   }
else if (colorCode == 3)
   {
   Print("緑");
   }
else
   {
   Print("未定義の色");
   }
 

switch文を活用することで、コードの可読性と効率性を高めることができます。特に多くの固定値に基づく条件分岐を扱う際には、その効果を最大限に発揮します。プログラミングにおいては、目的に応じて最適なコードを選択することが重要です。switch文は、コードを整理し、意図を明確に伝えることができます。

 

執筆者紹介
林貴晴

林 貴晴(AMSER株式会社代表取締役)

内資系薬品会社で約10年勤務の後、
外資系製薬会社(現IQVIA及びGSK)で合計約10年を勤務
その後EA AMSERを開発し、その成績を評価され、株式会社ゴゴジャンの部長として抜擢。
現在はAMSER株式会社代表取締役。