case

Die EGL-Anweisung case stellt eine Alternative zu verschachtelten if-Anweisungen dar. Anhand von Auswertungen wählt EGL aus diversen Alternativen eine Gruppe von Anweisungen für die Ausführung aus. Die Anweisung case ähnelt einer C-Anweisung des Typs 'switch' oder einer COBOL-Anweisung des Typs EVALUATE.

Für die Anweisung sind zwei Hauptformate verfügbar. Bei der ersten Version wertet EGL ein einzelnes Kriterium aus und sucht in den when-Klauseln nach einem übereinstimmenden Wert. Bei der zweiten Version wird von Ihnen kein übergeordnetes Kriterium angegeben und EGL wertet der Reihe nach einen logischen Ausdruck für die einzelnen when-Anweisungen aus, wobei der Code für den ersten Ausdruck ausgeführt wird, der als wahr ausgewertet wird. Bei der ersten Version wird von EGL als einzige Bedingung nur die einfache Übereinstimmung mit dem Kriterium ausgewertet. Die zweite Bedingung bietet eine höhere Flexibilität. Die Vergleiche können auf Ungleichungen, Wertebereichen etc. basieren.

Es gibt zwei Typen von Kriterien, die Sie für einen Vergleich verwenden können:

Alle übrigen Kriterien sind nicht zulässig. Sie können beispielsweise nicht einen Datensatz mit einem anderen oder ein Ein-/Ausgabeobjekt (z. B. einen Datensatz des Typs SerialRecord) mit endOfFile vergleichen.

Wie in COBOL (aber im Unterschied zu C) wird die Steuerung nicht von einer Klausel when an die nächste weitergegeben. Nachdem die Anweisungen in einer Klausel when oder otherwise ausgeführt wurden, wird die Steuerung an die EGL-Anweisung übergeben, die direkt im Anschluss an die case-Anweisung folgt. Wird von EGL keine Übereinstimmung für eine Klausel when und keine Klausel otherwise gefunden, geht die Steuerung auch an die nächste Anweisung über, die im Anschluss an eine Anweisung case folgt, ohne einen Fehler auszulösen.

Enthält eine einzelne Klausel mehrere Abgleichausdrücke (siehe 'Beispiele' in diesem Abschnitt), wertet EGL die betreffenden Ausdrücke von links nach rechts aus und stoppt, wenn eine Übereinstimmung gefunden wurde.

Syntax

Syntaxdiagramm für die Anweisung 'case'
label
Eine Bezeichnung gefolgt von einem Doppelpunkt, die von einer Anweisung exit referenziert werden kann. Weitere Informationen hierzu finden Sie in Bedingte Anweisungen und Schleifenanweisungen.
criterion
Eine Variable, eine Konstante, ein Ausdruck, ein Literal oder eine Systemvariable (wie z.B. converseVar.eventKey oder sysVar.systemType).

Wenn Sie ein Kriterium für criterion angeben (erstes Syntaxdiagramm), müssen die nachfolgenden when-Klauseln mindestens einen Abgleichausdruck (matchExpr) enthalten. Wenn Sie kein Kriterium für criterion angeben (zweites Syntaxdiagramm), müssen alle nachfolgenden when-Klauseln einen logischen Ausdruck (logicalExpr) enthalten.

when
Der Anfang einer Klausel, die nur in folgenden Fällen aufgerufen wird:
  • Sie haben ein Kriterium für criterion angegeben und die Klausel when ist die erste Klausel mit einem Abgleichausdruck (matchExpr), der mit dem Kriterium (criterion) übereinstimmt.
  • Sie haben kein Kriterium für criterion angegeben und die Klausel when ist die erste Klausel mit einem logischen Ausdruck (logicalExpr), der als wahr ausgewertet wird.

Wenn Sie eine Klausel ohne EGL-Anweisungen schreiben, wird die Steuerung von der case-Schleife ohne Aufruf der Klausel otherwise übergeben.

Eine Anweisung case kann eine beliebige Anzahl von when-Klauseln enthalten.

matchExpr
Ein Ausdruck, mit dem das Kriterium (criterion) verglichen wird. Weitere Informationen hierzu finden Sie im Folgenden unter der Überschrift 'Abgleichausdrücke'.
logicalExpr
Ein Ausdruck, der als TRUE oder FALSE aufgelöst wird. Weitere Informationen finden Sie unter der Überschrift 'Logische Ausdrücke'.
statement
Eine Anweisung, die ausgeführt werden soll, wenn EGL den zugehörigen Ausdruck when abgleicht oder die zugehörige Klausel otherwise erreicht.
otherwise
Der Anfang einer Klausel, die von EGL aufgerufen wird, wenn keine Übereinstimmung zu einem Ausdruck when gefunden wird.

Beispiel

Das folgende Beispiel für eine Anweisung case enthält mehrere Abgleichausdrücke in der zweiten Klausel when (2, 3, 4):
  case (myRecord.requestID)
    when (1)
      myFirstFunction();
    when (2, 3, 4)
      try
        call myProgram;
      onException(iex InvocationException)
        myCallFunction(fileEx);
      end
    otherwise
      myDefaultFunction();
  end  
Das folgende Beispiel veranschaulicht eine Anweisung case ohne Kriterium:
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

In der Konsole werden die Wörter 'x passes' angezeigt. Die Anweisung case endet, wenn ein Ausdruck gefunden wird, der als wahr ausgewertet wird.


Feedback