progress-4gl
Dichiarazioni condizionali
Ricerca…
introduzione
Progress ABL supporta due istruzioni contendenti: IF/THEN/ELSE
e CASE
.
IF ... THEN ... ELSE-dichiarazione
Nella dichiarazione IF THEN ELSE
il risultato può essere una singola affermazione:
DEFINE VARIABLE i AS INTEGER NO-UNDO.
IF i = 0 THEN
MESSAGE "Zero".
ELSE
MESSAGE "Something else".
O un blocco, ad esempio aggiungendo un DO
blocco:
DEFINE VARIABLE i AS INTEGER NO-UNDO.
IF i = 0 THEN DO:
RUN procedure1.
RUN procedure2.
END.
ELSE DO:
RUN procedure3.
RUN procedure4.
END.
Diversi stati IF
possono essere nidificati con la sintassi ELSE IF
:
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.
La parte ELSE
non è obbligatoria:
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.
IF
/ ELSE IF
può confrontare diversi condizionali, con o senza connessioni interne. Questo ti lascia libero di rovinare il tuo codice in diversi modi:
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.
ASTUCCIO
La dichiarazione CASE
è molto più rigida rispetto al condizionale IF/ELSE
. Può solo confrontare una singola variabile e solo l'uguaglianza, non il grande / piccolo di ecc.
DEFINIRE VARIABILE c COME CARATTERE 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.
Utilizzando un OR
ogni WHEN
può confrontare diversi valori:
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.
Proprio come con l' IF
-statement ogni ramo può essere una singola istruzione o un blocco. Proprio come con l' ELSE
-affermazione, OTHERWISE
non è obbligatorio.
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.
A differenza di un switch
tipo c -clause non è necessario sfuggire alla dichiarazione CASE
- verrà eseguito solo un ramo. Se diversi WHEN
corrispondono solo al primo si innescherà. OTHERWISE
deve essere l'ultimo e si attiva solo se nessuno dei rami sopra corrisponde.
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.
IF ... THEN ... ELSE-funzione
IF THEN ELSE
può anche essere usato come una funzione per restituire un singolo valore. Questo è molto simile al ternario ?
-operatore di 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".
L'uso delle parentesi può facilitare la leggibilità di un codice come questo.
DEFINE VARIABLE i AS INTEGER NO-UNDO.
DEFINE VARIABLE c AS CHARACTER NO-UNDO.
c = (IF i < 5 THEN "low" ELSE "high").
Il valore di IF
-part e il valore di ELSE
-part devono essere dello stesso tipo di dati. In questo caso non è possibile utilizzare ELSE IF
.
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).
Diversi paragoni possono essere fatti IF
statement:
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.