Über die Vergleichsoperatoren werden in einfachen Ausdrücken zwei Basisterme gleichen Typs miteinander verglichen. In zusammengesetzten Ausdrücken werden durch die Vergleichsoperatoren Ausdrücke miteinander verglichen, deren Ergebnisse vom gleichen Typ sein müssen.
Vergleich | Operatoren | ||
kleiner als | LT | < | |
kleiner oder gleich | LE |
| |
gleich | EQ | = | == |
nicht gleich | NE | <> | |
größer oder gleich | GE | >= | |
größer als | GT | > |
Das Ergebnis einer Vergleichsoperation ist immer ein boolescher Wert, das heißt ein Wert aus dem Wertebereich FALSE oder TRUE.
Für alle Vergleichsoperatoren gelten die gleichen Regeln; diese Regeln werden daher nur einmal beschrieben.
Regeln:
Die Operanden eines Vergleichsoperators müssen vom gleichen Typ sein; andernfalls wird eine Fehlermeldung ausgegeben und die Fehlerbehandlung angestoßen.
Das Ergebnis einer Vergleichsoperation ist entweder TRUE (= wahr) oder FALSE (= falsch).
Ist der Vergleichsoperator das Gleichheitszeichen (=), muss der Vergleichsausdruck in Klammern eingeschlossen werden, damit Prüfung auf Gleichheit und Zuweisung eines Wertes an einen Operanden eindeutig zu unterscheiden sind (operand1 = operand2). Wird das Gleichheitszeichen doppelt geschrieben (==), kann die Klammerung entfallen.
Beispiel
/B = A + ZAEHL /IF (B = A + ZAEHL)
Die erste Zeile enthält eine Zuweisung: Der Variablen B wird als Ergebnis die Summe der Inhalte der Variablen A und ZAEHL zugewiesen.
Die zweite Zeile enthält einen Vergleichsausdruck: Wenn der Inhalt der Variablen B, der an anderer Stelle in der Prozedur gesetzt wurde, dem Ergebnis der Addition der Inhalte von A und ZAEHL entspricht, wird der „Then“-Zweig des IF-Blocks durchlaufen; der Inhalt der Variablen B wird nicht verändert, ihr wird kein neuer Wert zugewiesen. Um die Unterscheidung Vergleich / Zuweisung deutlicher zu machen, kann der Vergleichsoperator wahlweise auch als == geschrieben werden:
/IF (B == A + ZAEHL)
Numerischer Vergleich
„Numerischer Vergleich“ bedeutet, dass beide Operanden des Vergleichsoperators integer Ausdrücke sind. Verglichen werden die Werte der Operanden.
Vergleich boolescher Werte
Beide Operanden des Vergleichsoperators müssen boolesche Ausdrücke sein.
Regeln:
Es sind nur folgende Operatoren zugelassen:
Operation | Operatoren | ||
gleich | EQ | = | == |
nicht gleich | NE | <> |
String-Vergleich
„String-Vergleich“ bedeutet, dass beide Operanden des Vergleichsoperators String-Ausdrücke sind.
Regeln:
Strings werden zeichenweise, das heißt byteweise, verglichen, und zwar von links nach rechts bis zum ersten unterschiedlichen Zeichen.
Das erste unterschiedliche Zeichen bestimmt, welcher String größer bzw. kleiner ist; die weiteren Zeichen werden für den Vergleich nicht mehr berücksichtigt.
Die Begriffe „größer“ und „kleiner“ beziehen sich auf die Reihenfolge der Zeichen im EBCDI-Code, von X'00' bis X'FF'.
Sind die beiden Strings unterschiedlich lang, haben aber bis zum letzten Zeichen des kürzeren Strings die gleiche Zeichenfolge, so gilt der kürzere String als kleiner.
Strings sind gleich, wenn sie gleich lang sind und sich in keinem Zeichen unterscheiden.
Zeichen- oder byteweiser Vergleich bedeutet: die EBCDIC-Äquivalente der Zeichen werden untersucht.
Beispiel
Zuweisung | Ergebnis |
/A = 'ABC' /B = 'ABCDE' /C = X'C1C2C3' /D = 'B' /E = (B > A) /F = (D > A) /G = (C = A) /H = (B = A) | TRUE TRUE TRUE FALSE |
Der Variablen E wird der boolesche Wert TRUE zugewiesen, da die Strings in den Variablen B und A in den ersten drei Zeichen identisch sind, der String in der Variablen A ('ABC') jedoch kürzer und daher kleiner ist als der String in der Variablen B ('ABCDE').
Auch der Variablen F wird der boolesche Wert TRUE zugewiesen: Der String 'B' (in der Variablen D) ist zwar kürzer als der String 'ABC' (in der Variablen A), das erste Zeichen des Strings 'B' hat jedoch im EBCDI-Code einen höheren Wert als das erste Zeichen des Strings 'ABC'.
Der Vergleich der Variableninhalte von C und A liefert Gleichheit, da der X-String, mit dem die Variable C initialisiert wurde, die Halbbyte-Schreibweise des Strings 'ABC' ist: Der Variablen G wird daher der boolesche Wert TRUE zugewiesen.
Der Variablen H wird der boolesche Wert FALSE zugewiesen, da die Strings in den Variablen B und A nicht gleich sind.