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.


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow