Inhaltsverzeichnis

Entscheidungen

IF

  IF <cond>
     THEN <anweisungen>
     [ELSE <anweisungen> ]
  END IF

Die Angabe <cond> ist eine gültige Bedingung. Hinter THEN sowie ggf. hinter ELSE folgen eine oder mehrere Anweisungen, die ausgeführt werden, wenn die Bedingung bzw. der ELSE-Fall zutrifft.

IF-Anweisungen können geschachtelt werden. Wenn die Schachtelung zu tief wird, empfiehlt sich jedoch eher die Verwendung einer SELECT-Anweisung.

SELECT

  SELECT <expr-1>
  [[BUT] OF {<expr-2> | <cond-1>} ...
      <anweisungen> ]
  [OTHERWISE
      <anweisungen> ]
  END SELECT

Hinter OF kann ein Ausdruck <expr-2> oder eine Bedingung<cond-1> stehen.

<expr-2> kann eine Liste von Ausdrücken enthalten. Mehrere Ausdrücke werden durch Komma getrennt.

BUT OF bedeutet eine Verneinung, d.h. der Vergleich ist wahr, wenn kein Ausdruck aus der Liste bzw. die OF-Bedingung nicht zutrifft.

Bei der Select-Anweisung wird der Inhalt von <expr-1> mit dem Inhalt von <expr-2> bzw. <cond-1> verglichen. Enthält <expr-2> eine Liste von Ausdrücken, wird jeder dieser Ausdrücke einzeln mit <expr-1> verglichen. Wenn das Ergebnis wahr ist (TRUE), werden die Anweisungen hinter <expr-2> bzw. <cond-1> ausgeführt. Wenn nicht, wird der Inhalt von expr-1 mit dem der nächsten OF-Angabe verglichen.

Sobald eine OF-Angabe wahr war, werden die dahinter stehenden Anweisungen ausgeführt und anschließend die Ausführung der SELECT-Anweisung beendet. Wenn alle OF-Angaben überprüft wurden, und keine davon wahr war, werden - falls vorhanden - die Anweisungen hinter OTHERWISE ausgeführt. Es wird immer höchstens ein Anweisungsblock ausgeführt.

Die anderen OF-Angaben werden nicht mehr überprüft,

Beispiel für eine Select-Anweisung mit einer Liste von Ausdrücken:

  SELECT Wert
  OF 5, 10, 15, 20
     Ergebnis = Wert / 5
  BUT OF 1, 3, 7, 9
     Ergebnis = Wert / 2
  OTHERWISE
     Ergebnis = 0
  END SELECT

Wenn hinter der OF-Angabe Bedingungen stehen sollen, sollte <expr-1> „TRUE“ oder „FALSE“ lauten, damit ein sinnvoller Vergleich möglich ist. Die entsprechende Select-Anweisung mit Bedingung könnte so aussehen, wobei hier noch eine zusätzliche größer-Abfrage enthalten ist, die in dem obigen Beispiel so nicht möglich wäre:

  SELECT TRUE
  OF Wert = 5 OR Wert = 10 or Wert = 15 or Wert = 20
     Ergebnis = Wert / 5
  OF Wert > 20
     Ergebnis = Wert / 10
  BUT OF Wert = 1 or Wert = 3 or Wert = 7 or Wert = 9
     Ergebnis = Wert / 2
  OTHERWISE
     Ergebnis = 0
  END SELECT

Das folgende Beispiel zeigt ein falsche Select-Anweisung:

  SELECT Name
  OF "Müller" or "Meier"
     ......
  END SELECT

Es würde in dem Fall zuerst die OF-Angabe („Müller“ or „Meier“) ausgewertet, die als Bedingung erkannt wird und TRUE ergibt, wenn einer der beiden Strings nicht leer ist. Und das Ergebnis (TRUE) wird dann mit dem Inhalt von Name verglichen, also z.B. IF TRUE = „Schulze“, was keinen sinnvollen Vergleich darstellt. Der Syntax-Parser kann nicht erkennen, ob das Absicht ist, denn er kennt den Inhalt der Variablen nicht. Es könnte ja hinter dem SELECT durchaus auch ein True- oder False-Wert stehen, der verglichen werden soll. Die Anweisung wird also ohne Fehlermeldung akzeptiert werden.

Dreifach-Operation

  <ergebnis> = ? <bedingung> ? <wert-wenn-wahr> : <wert-wenn-falsch>

Die Dreifachoperation (Ternary Operation) fasst eine einfache IF-ELSE-Bedingung mit Wertzuweisung in einem Ausdruck zusammen. Derselbe Sachverhalt ließe sich auch in einer IF-Anweisung ausdrücken, die wie folgt aussehen würde:

  IF <bedingung> THEN
      ergebnis = <wert-wenn-wahr>
  ELSE
      ergebnis = <wert-wenn-falsch>
  END IF

Sie wird eingeleitet durch das Fragezeichen; die Bedingung wird mit einem weiteren Fragezeichen abgeschlossen. Danach kommt zunächst der Wert, der eingesetzt werden soll, wenn die Bedingung wahr ist, anschließend ein Doppelpunkt, und danach der Wert, der eingesetzt werden soll, wenn die Bedingung nicht zutrifft.

<wert-wenn-wahr> und <wert-wenn-falsch> sind jeweils Ausdrücke .

Beispiel:

Wenn die Person jünger als 21 ist, wird mit 10 multipliziert, sonst mit dem Alter:

  Beitrag = ? Alter < 21 ? 10 * Berechnungsfaktor : Alter * Berechnungsfaktor 

oder

  Beitrag = (? Alter < 21 ? 10 : Alter) * Berechnungsfaktor