Zoeken…


Invoering

Progress ABL ondersteunt twee contitional statements: IF/THEN/ELSE en CASE .

ALS ... DAN ... ELSE-verklaring

In de IF THEN ELSE instructie kan het resultaat een enkele instructie zijn:

DEFINE VARIABLE i AS INTEGER     NO-UNDO.

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

Of een blok, bijvoorbeeld door een DO blok toe te voegen:

DEFINE VARIABLE i AS INTEGER     NO-UNDO.

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

Verschillende IF verklaringen kunnen worden genest met de ELSE IF -syntaxis:

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.

Het ELSE -deel is niet verplicht:

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.

De IF / ELSE IF kan verschillende conditionals vergelijken, met of zonder interne verbindingen. Hierdoor kunt u uw code op verschillende manieren verknoeien:

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.

GEVAL

De CASE verklaring is veel strenger dan de IF/ELSE -voorwaarde. Het kan alleen een enkele variabele en alleen gelijkheid vergelijken, niet larget / kleiner dan enz.

DEFINE VARIABLE c ALS KARAKTER 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.

Met behulp van een OR kan WHEN verschillende waarden vergelijken:

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.

Net als bij de IF verklaring kan elke tak een enkele bewering of een blok zijn. Net als bij de ELSE verklaring is OTHERWISE niet verplicht.

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.

In tegenstelling tot een c-stijl switch -clausule is het niet nodig om aan de CASE --statement te ontsnappen - er wordt slechts één branch uitgevoerd. Als meerdere WHEN overeenkomen, wordt alleen de eerste geactiveerd. OTHERWISE MOET de laatste zijn en wordt alleen geactiveerd als geen van de bovenstaande takken overeenkomt.

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.

ALS ... DAN ... ELSE-functie

IF THEN ELSE kan ook worden gebruikt als een functie om een enkele waarde te retourneren. Dit lijkt veel op het drieluik ? -operator van 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".

Het gebruik van haakjes kan de leesbaarheid van code als deze vergemakkelijken.

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

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

De waarde van het IF en de waarde van het ELSE moeten van hetzelfde gegevenstype zijn. Het is in dit geval niet mogelijk ELSE IF te gebruiken.

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).

Verschillende vergelijkingen zijn mogelijk in de IF verklaring:

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow