case
EGL case 文は、複数のネストされた if 文の代わりに使用します。1 回以上の評価に基づいて、EGL は 1 つの文セットを選択し、さまざまな代替手段から実行します。 case 文は、C の切り替えまたは COBOL EVALUATE 文と同様です。
この文には、主な書式が 2 つあります。 最初のバージョンでは、EGL は単一の基準を評価し、when 文節中の一致する値を探します。 2 番目のバージョンでは、ユーザーが最上位の基準を提供するのではなく、EGL が、 「true」と評価される最初の式のコードを実行して、各 when 文の 論理式を順番に評価します。 最初のバージョンでは、EGL が評価する唯一の条件は、基準に対して単純に等しいことです。2 番目の条件は、比較演算子や、値の範囲などの指定に基づいて、より大きな柔軟性と比較を提供します。
- 比較演算子「等しい」(==) の左側の式。 ここで、突き合わせ式は「criterion ==」比較の右側にくるものになります。
- converseVar.eventKey。 突き合わせ式は、キーの名前 (「converseVar.eventKey IS」比較の右側にある式) です。
- SysVar.systemType。 突き合わせ式はシステム・タイプの名前です。これは引用符に囲まれています (「SysVar.systemType IS」比較の右側にある式)。
他に有効な基準はありません。 例えば、1 つのレコードを別のレコードと比較したり、入出力オブジェクト (SerialRecord のような) を endOfFile と比較することはできません。
COBOL (C ではなく) の場合と同じく、コントロールは 1 つの when 文節を介して次の文節に渡されるのではありません。 when または otherwise 文節中で文が実行された後は、 case 文の直後の EGL 文にコントロールが渡されます。 EGL が when 文節と一致しない、または otherwise 文節を検出できない場合、コントロールは case 文が終わった直後の文に渡され、エラーは発生しません。
単一の文節に複数の突き合わせ式 (このトピックの『例』を参照) が含まれている場合、 EGL は、それらの式を左から右へと評価し、一致を見つけたときに停止します。
構文

- label
- ラベル。後にコロンが続き、exit 文で参照できます。詳しくは、 条件およびループ文を参照してください。
- criterion
- 変数、定数、式、リテラル、またはシステム変数 (converseVar.eventKey や sysVar.systemType など)。
criterion (最初の構文図) を指定する場合、 それに続く各 when 文節には、1 つ以上の matchExpression インスタンスが必要です。 criterion (2 番目の構文図) を指定しない場合、 それに続く各 when 文節には、logical expression が必要です。
- when
- 以下の場合にのみ呼び出される文節の先頭。
- criterion が指定され、when 文節が criterion と等しい matchExpression を含む最初の文節である場合。
- criterion が指定されず、when 文節が、TRUE と評価される論理式を含む最初の文節である場合。
文節を EGL 文を使用せずにコーディングする場合、制御は、otherwise 文節を呼び出すことなく case のループから渡されます。
case 文には、when 文節がいくつあっても構いません。
- matchExpression
- criterion に対する式が比較されます。 詳しくは、このトピック『突き合わせ式』を参照してください。
- logicalExpression
- TRUE または FALSE に解決される式。 詳しくは、『論理式』を参照してください。
- statement
- EGL が関連付けられた when 式と一致する、 または関連付けられた otherwise 文節に達した場合に実行される文。
- otherwise
- when 式と一致しない場合に EGL が呼び出す文節の開始部分。
例
case (myRecord.requestID)
when (1)
myFirstFunction();
when (2, 3, 4)
try
call myProgram;
onException(iex InvocationException)
myCallFunction(fileEx);
end
otherwise
myDefaultFunction();
end
Program calc3
x INT = 3;
y INT = 5;
z INT = 7;
function main()
case
when (x == 3)
writeStdOut("x passes");
when (y == 5)
writeStdOut("y passes");
when (z == 7)
writeStdOut("z passes");
otherwise
writeStdErr("You should not see this msg");
end
end
コンソールには、「x passes」という語が表示されます。 case 文は TRUE 式が検出されたときに終了します。