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.
- Alle Ausdrücke, die auf der linken Seite des Vergleichsoperators 'equals' (==) angegeben werden können. Als Abgleichausdruck kommen hier alle Ausdrücke in Frage, die auf der rechten Seite des Vergleichs 'criterion ==' stehen können.
- converseVar.eventKey. Der Abgleichausdruck ist der Name eines Schlüssels (ein beliebiger Ausdruck, der auf der rechten Seite des Vergleichs 'converseVar.eventKey IS' stehen kann).
- SysVar.systemType. Der Abgleichausdruck ist der Name eines Systemtyps (ein beliebiger Ausdruck, der auf der rechten Seite des Vergleichs 'SysVar.systemType IS' stehen kann).
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

- 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
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
In der Konsole werden die Wörter 'x passes' angezeigt. Die Anweisung case endet, wenn ein Ausdruck gefunden wird, der als wahr ausgewertet wird.