case

EGL case 文は、複数のネストされた if 文の代わりに使用します。1 回以上の評価に基づいて、EGL は 1 つの文セットを選択し、さまざまな代替手段から実行します。 case 文は、C の切り替えまたは COBOL EVALUATE 文と同様です。

この文には、主な書式が 2 つあります。 最初のバージョンでは、EGL は単一の基準を評価し、when 文節中の一致する値を探します。 2 番目のバージョンでは、ユーザーが最上位の基準を提供するのではなく、EGL が、 「true」と評価される最初の式のコードを実行して、各 when 文の 論理式を順番に評価します。 最初のバージョンでは、EGL が評価する唯一の条件は、基準に対して単純に等しいことです。2 番目の条件は、比較演算子や、値の範囲などの指定に基づいて、より大きな柔軟性と比較を提供します。

比較に使用できる基準には 3 つの型があります。

他に有効な基準はありません。 例えば、1 つのレコードを別のレコードと比較したり、入出力オブジェクト (SerialRecord のような) を endOfFile と比較することはできません。

COBOL (C ではなく) の場合と同じく、コントロールは 1 つの when 文節を介して次の文節に渡されるのではありません。 when または otherwise 文節中で文が実行された後は、 case 文の直後の EGL 文にコントロールが渡されます。 EGL が when 文節と一致しない、または otherwise 文節を検出できない場合、コントロールは case 文が終わった直後の文に渡され、エラーは発生しません。

単一の文節に複数の突き合わせ式 (このトピックの『例』を参照) が含まれている場合、 EGL は、それらの式を左から右へと評価し、一致を見つけたときに停止します。

構文

case 文の構文図
label
ラベル。後にコロンが続き、exit 文で参照できます。詳しくは、 条件およびループ文を参照してください。
criterion
変数、定数、式、リテラル、またはシステム変数 (converseVar.eventKeysysVar.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 が呼び出す文節の開始部分。

以下は、2 番目の when 文節に複数の突き合わせ式 (2, 3, 4) を含む case 文の例です。
  case (myRecord.requestID)
    when (1)
      myFirstFunction();
    when (2, 3, 4)
      try
        call myProgram;
      onException(iex InvocationException)
        myCallFunction(fileEx);
      end
    otherwise
      myDefaultFunction();
  end  
以下は、無基準 case ステートメントの例です。
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 式が検出されたときに終了します。


フィードバック