progress-4gl
Voorwaardelijke stellingen
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.