Suche…


Einführung

Fortschritt ABL unterstützt zwei Bedingungsanweisungen: IF/THEN/ELSE und CASE .

WENN ... DANN ... ELSE-Anweisung

In der IF THEN ELSE Anweisung kann das Ergebnis entweder eine einzelne Anweisung sein:

DEFINE VARIABLE i AS INTEGER     NO-UNDO.

IF i = 0 THEN
    MESSAGE "Zero".
ELSE 
    MESSAGE "Something else".

Oder einen Block, zum Beispiel durch Hinzufügen eines DO Blocks:

DEFINE VARIABLE i AS INTEGER     NO-UNDO.

IF i = 0 THEN DO:
    RUN procedure1.
    RUN procedure2.
END.
ELSE DO: 
    RUN procedure3.
    RUN procedure4.
END.

Mit dem ELSE IF -syntax können mehrere IF -Statements verschachtelt werden:

DEFINE VARIABLE i AS INTEGER     NO-UNDO.

IF i = 0 THEN DO:
    RUN procedure1.
    RUN procedure2.
END.
ELSE IF i = 1 THEN DO:
    RUN procedure3.
    RUN procedure4.

END.
ELSE DO: 
    RUN procedure5.
    RUN procedure6.
END.

Der ELSE ist nicht obligatorisch:

DEFINE VARIABLE l AS LOGICAL     NO-UNDO.

l = TRUE.

IF l = TRUE THEN DO:
    MESSAGE "The l variable has the value TRUE" VIEW-AS ALERT-BOX.
END.

Die IF / ELSE IF kann mehrere Bedingungen mit oder ohne interne Verbindungen vergleichen. Dadurch können Sie Ihren Code auf verschiedene Arten durcheinander bringen:

DEFINE VARIABLE i AS INTEGER     NO-UNDO.
DEFINE VARIABLE l AS LOGICAL     NO-UNDO.

IF i < 30 OR l = TRUE THEN DO:
    
END.
ELSE IF i > 30 AND l = FALSE OR TODAY = DATE("2017-08-20") THEN DO:

END.
ELSE DO:
    MESSAGE "I dont really know what happened here".
END.

FALL

Die CASE -Anweisung ist viel strenger als die IF/ELSE Bedingung. Es kann nur eine einzige Variable und nur Gleichheit vergleichen, nicht größer / kleiner als usw.

DEFINE VARIABLE C ALS CHARAKTER NO-UNDO.

CASE c:
    WHEN "A" THEN DO:
        RUN procedureA.
    END.
    WHEN "B" THEN DO:
        RUN procedureB.
    END.
    OTHERWISE DO:
        RUN procedureX.
    END.
END CASE.

Mit einem OR jedes WHEN verschiedene Werte vergleichen:

DEFINE VARIABLE c AS CHARACTER   NO-UNDO.

CASE c:
    WHEN "A" THEN DO:
        RUN procedureA.
    END.
    WHEN "B" OR WHEN "C" THEN DO:
        RUN procedureB-C.
    END.
    OTHERWISE DO:
        RUN procedureX.
    END.
END CASE.

Wie bei der IF -Anweisung kann jeder Zweig entweder eine einzelne Anweisung oder ein Block sein. Genau wie bei der ELSE -Statement ist OTHERWISE nicht zwingend.

DEFINE VARIABLE c AS CHARACTER   NO-UNDO.

CASE c:
    WHEN "A" THEN
        RUN procedureA.
    WHEN "B" OR WHEN "C" THEN
        RUN procedureB-C.
END CASE.

Im Gegensatz zu einem c-style - switch -Klausel gibt es keine Notwendigkeit , die zu entkommen CASE -Anweisung - nur einen Zweig ausgeführt wird. Wenn mehrere WHEN übereinstimmen, wird nur das erste ausgelöst. OTHERWISE muss der letzte sein und wird nur ausgelöst, wenn keiner der darüber liegenden Zweige übereinstimmt.

DEFINE VARIABLE c AS CHARACTER   NO-UNDO.

c = "A".

CASE c:
    WHEN "A" THEN
        MESSAGE "A" VIEW-AS ALERT-BOX. //Only "A" will be messaged
    WHEN "A" OR WHEN "C" THEN
        MESSAGE "A or C" VIEW-AS ALERT-BOX.
END CASE.

WENN ... DANN ... ELSE-Funktion

IF THEN ELSE kann auch wie eine Funktion verwendet werden, um einen einzelnen Wert zurückzugeben. Das ist dem ternären sehr ähnlich ? -operator von C.

DEFINE VARIABLE i AS INTEGER     NO-UNDO.
DEFINE VARIABLE c AS CHARACTER   NO-UNDO.

/* Set c to "low" if i is less than 5 otherwise set it to "high"    
c = IF i < 5 THEN "low" ELSE "high".

Die Verwendung von Klammern kann die Lesbarkeit von Code erleichtern.

DEFINE VARIABLE i AS INTEGER     NO-UNDO.
DEFINE VARIABLE c AS CHARACTER   NO-UNDO.

c = (IF i < 5 THEN "low" ELSE "high").

Der Wert des IF Teils und der Wert des ELSE Teils müssen vom gleichen Datentyp sein. In diesem Fall kann ELSE IF nicht verwendet werden.

DEFINE VARIABLE dat                AS DATE        NO-UNDO.
DEFINE VARIABLE beforeTheFifth     AS LOGICAL   NO-UNDO.

dat = TODAY.

beforeTheFifth = (IF DAY(dat) < 5 THEN TRUE ELSE FALSE).

In der IF -Anweisung können mehrere Vergleiche durchgeführt werden:

DEFINE VARIABLE between5and10 AS LOGICAL     NO-UNDO.
DEFINE VARIABLE i             AS INTEGER     NO-UNDO INIT 7.

between5and10 = (IF i >= 5 AND i <= 10 THEN TRUE ELSE FALSE).

MESSAGE between5and10 VIEW-AS ALERT-BOX.


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow