Die folgende Tabelle enthält eine Liste der EGL-Operatoren nach Vorrangstellung in absteigender Reihenfolge. Einige Operatoren haben je nach Kontext mehrere Bedeutungen. EGL verwendet mitunter Sonderzeichen zur Darstellung von Typenerweiterungen (siehe Typerweiterungszeichen) und Begrenzern (siehe Begrenzer).
Diese Tabelle enthält nicht den Zuordnungsoperator (=) und auch keine komplexen Zuordnungsoperatoren (wie beispielsweise '+='). Weitere Informationen zu diesen Sonderzeichen finden Sie unter Zuordnungen.
| Operatoren (durch Kommata getrennt) | Bedeutung |
|---|---|
| . | Der Member-Zugriffsoperator (ein Punkt) bietet Zugriff auf die Member einer Entität, beispielsweise auf Felder in Datensätzen, Funktionen in Bibliotheken und Eigenschaften in Variablen. Es sind mehrere Qualifizierungsebenen zulässig. Von links nach rechts werden die Member immer spezifischer. |
| @ | Der Operator '@' gibt an, dass sich ein Name auf eine Eigenschaft und nicht auf ein Feld bezieht. |
| new | Der Operator 'new' ruft die Konstruktorfunktion (eine Sonderfunktion zum Erstellen einer neuen Variablen) zum Erstellen einer Verweisvariablen (einer Variablen mit einer Adresse und keinem Wert) auf. Mit Ausnahme bestimmter ExternalType-Abschnitte ist dies ein Standardkonstruktor ohne Parameter (siehe 'Operator 'new''). |
| [] | Der Zugriffsoperator für Feldgruppen (eckige Klammern) trennt einen Indexwert von einem Feldgruppennamen oder einen Unterzeichenfolgenwert vom Namen einer Zeichenvariablen: a[x] ist ein Feldgruppenindex, und b[x:y] ist eine Unterzeichenfolge. |
| +, - | Das monadische Pluszeichen (+) und das monadische Minuszeichen (-) sind Zeichen, die einem Operanden oder einem Klammerausdruck vorangestellt sind. Sie sind kein Operator zwischen zwei Ausdrücken. |
| ** | ** ist der Exponentenoperator mit der Bedeutung 'mit einer Potenz von'. Beispiel: 'c = a**b' bedeutet, dass 'c' der Wert 'a' mit der Potenz 'b' ('a' hoch 'b') zugeordnet wird. Der erste Operand ('a' im vorstehenden Beispiel) hat den Typ FLOAT, der keinen negativen Wert zulässt. Der zweite Operand ('b' in vorstehendem Beispiel) ist ein Literal oder eine Variable vom Typ FLOAT (positiv, negativ oder 0). |
| *, /, &, |, xor | Multiplikation (*), Ganzzahlteilung (/) und drei Bitoperatoren haben dieselbe Vorrangstellung. Die Teilung (Division) von ganzen Zahlen
kann zu einem Bruchwert führen. Beispiel: 7/5 ergibt 1,4. Jeder der Bitoperatoren 'Und' (&) , 'Oder' (|) und 'exklusives Oder' (xor) führt eine bitweise Operation für zwei Operanden aus und gibt einen Wert vom Typ INT zurück. Beide Operanden können den Typ HEX(2), HEX(4), HEX(8), INT oder SMALLINT aufweisen. Die Operation beginnt mit der Konvertierung aller HEX- bzw. SMALLINT-Operanden in den Typ INT. Im Fall von HEX wird der Wert des Operanden bei der Operation linksseitig mit Nullen aufgefüllt, bis die Länge 4 Byte beträgt. |
| % | % ist der Restwertoperator. Dieser wird in den Modulus aufgelöst, wenn der erste von zwei Operanden oder numerischen Ausdrücken durch den zweiten dividiert wird. Beispiel: 7%5 ergibt 2. |
| +, - | Addition (+) und Subtraktion (-) sind binäre Operationen (die zwei Operanden erfordern) mit gleicher Vorrangstellung. |
| as | Der Umwandlungsoperator gibt einen Typ (zweiter Operand) für den ersten Operanden an (siehe Operator 'as'). |
| ::, ?:, + | EGL verwendet zwei Operatoren ausschließlich für Verkettungen (:: und ?:). Das Pluszeichen wird ebenfalls als Verkettungsoperator verwendet. Die Unterschiede zwischen den Operatoren wird unter Verkettungsoperatoren erläutert. |
| ==, !=, <, >, <=, >=, isa | Diese logischen Operatoren für boolesche Vergleiche haben die gleiche Vorrangstellung. Jeder Ausdruck, der einen dieser Operatoren enthält, wird entweder als TRUE (wahr) oder FALSE (falsch) ausgewertet. |
| ! | ! ist der Operator not, der in EGL als boolescher Wert ('true' für wahr oder 'false' für falsch) ausgewertet wird. Dieser Wert ist hierbei der gegenteilige Wert eines unmittelbar folgenden logischen Ausdrucks. Dieser nächstfolgende Ausdruck muss in runden Klammern stehen. |
| is, not, in, like, matches | Diese logischen Operatoren für Vergleiche haben die gleiche Vorrangstellung. Jeder Ausdruck, der einen dieser Operatoren enthält, wird entweder als 'true' (wahr) oder 'false' (falsch) ausgewertet. Siehe "Operator 'in'", "Operator 'like'" und "Operator 'matches'". |
| &&, and | && (auch als 'and' buchstabiert) bedeutet 'beide Seiten müssen wahr sein'. Ein Ausdruck wird dann in TRUE (wahr) aufgelöst, wenn die logischen Ausdrücke auf beiden Seiten des Operators 'and' jeweils wahr sind; andernfalls wird der Ausdruck in FALSE (falsch) aufgelöst. |
| ||, or | || (auch als 'or' buchstabiert) bedeutet 'eine der beiden Seiten oder beide Seiten müssen wahr sein'. Ein Ausdruck wird dann in FALSE (falsch) aufgelöst, wenn die logischen Ausdrücke auf beiden Seiten des Operators 'or' jeweils falsch sind; andernfalls wird der Ausdruck in TRUE (wahr) aufgelöst. |
Bei Nichtbeachtung der Regeln zur Vorrangstellung kann es zu nicht erwarteten Fehlern kommen, wie in den nachstehenden Beispielen dargelegt wird.
n NUM(3) = 100 - 98 * 100;
EGL0049E Bei der Zuordnung eines Wertes von -9,700 zu 'n' ist ein Überlauffehler aufgetreten.
if (!element in myArray)
Stattdessen hat der Operator 'not' (!) Vorrang vor dem Operator 'in', sodass EGL die Feldgruppe nach einem Wert 'false' durchsucht, was vom Entwickler nicht erwartet wurde.
n NUM(3) = (100 - 98) * 100;
if (!(element in myArray))
| Plattform | Problem |
|---|---|
| COBOL-Generierung im Vergleich zur Java™-Generierung | Der Restwertoperator (%) liefert sowohl in COBOL als auch in Java konsistente Ergebnisse, wenn beide Operanden ganze Zahlen sind. Enthalten die Operanden jedoch Dezimalstellen, verwenden die beiden Sprachen unterschiedliche Rundungsalgorithmen, und es können voneinander abweichende Restwerte herauskommen. |
| JavaScript-Generierung | Die drei Bitoperatoren (& | Xor) werden nicht unterstützt. Der Operator 'in' wird ebenfalls nicht unterstützt. |