18.6.9 switch-endswitch
switchステートメントを使用すると、式の値に応じてコードにある複数の選択肢の中から処理を選択できます。式は括弧で囲んで指定してください。
switchステートメントには、caseラベルまたはdefaultラベルが付いているものがあり、それらが選択肢となります。各caseラベルは、定数値を持てます。switchステートメントはcaseラベルがなければ意味を持たないため、switchステートメント中には、1つ以上のcaseラベルを付けるようにしてください。
defaultラベルは、1つしか指定できません。defaultラベルはオプションであり、これに値を指定しないようにしてください。
(1) 形式
switch (式) [case 定数値:]+ [式;]* ... ... [default:] [式;]* endswitch;
(2) 説明
-
式が評価されます。
-
式の値と等しいcaseラベル値を持つブロックに制御が移ります。breakに達するまでは、(caseラベル値とは関係なく)引き続きすべてのステートメントが実行されます。
-
breakステートメントに達すると、switchステートメントの外側に制御が移ります。
-
式の値がcaseラベル値と等しくないときは、defaultラベルが指定されていると、その位置に制御が移ります。
switch-endswitchステートメントを指定するには、次の規則に従います。
-
switchステートメントの式のデータ型は、定数値のようなラベル定数のものと同一にします。
-
ネストするswitchステートメントの数は、255以内に抑えてください。
-
すべてのcaseラベルが、関連づけられた実行ステートメントを持つ必要はありませんが、最終のcaseステートメントは、関連づけられた実行ステートメントを最低1つ持つようにします。
-
switch-endswitchステートメントは、最大255のcaseラベルを持てます。
-
caseラベルに指定できるのは、数値定数、string定数、またはAIT言語のマクロで、式は指定できません。
例
case -5: // 有効 case +6: // 有効 case "String": // 有効 case intvar: // 無効 case 3+2: // 無効
-
caseラベルで指定する定数は、switchステートメントの式と同じ型にします。
例
switch (Stringvar1+Stringvar2) // 変数はどちらもstring型 case 1: // 無効 case "キャプション1": // 有効 .. .. endswitch;
-
switch caseステートメントとともにcaseステートメントを指定しなければ、文法エラーとして解釈されます。
-
switch caseステートメント内に記述できるbreakステートメントは、255個までです。
-
switch caseステートメント内のcaseステートメントに別のステートメントを指定する必要はありませんが、最終のcaseステートメントには、必ず別のステートメントを追加してください。
例
switch(i) { case 1: case 2: a=b+c; // "a=b+c;"ステートメントを指定しなければ、 // スクリプトアナライザーから文法エラーが発行される }
(3) 記述例
s1="abcdefghijk"; switch (!AIT_IsEmpty(s1 )) case true: // s1が空の場合実行されます s2 = AIT_StrUpper(s1); AIT_MessageBox("s2",s2); if ( ( length = AIT_StrLength(s2)) > 10) break; endif; break; default: //状態がfalseを返してきた場合 break; //実行されます endswitch;