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"が表示されます。
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文を使用すると、多くの条件分岐があるコードの可読性を向上させることができます。各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株式会社代表取締役。