Recherche…


Introduction

Progress ABL prend en charge deux instructions conditionnelles: IF/THEN/ELSE et CASE .

IF ... THEN ... ELSE-statement

Dans l'instruction IF THEN ELSE , le résultat peut être soit une seule instruction:

DEFINE VARIABLE i AS INTEGER     NO-UNDO.

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

Ou un bloc, par exemple en ajoutant un bloc DO :

DEFINE VARIABLE i AS INTEGER     NO-UNDO.

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

Plusieurs états IF peuvent être imbriqués avec ELSE IF -syntax:

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 partie ELSE n'est pas obligatoire:

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.

Le IF / ELSE IF peut comparer plusieurs conditions, avec ou sans connexions internes. Cela vous laisse libre de gâcher votre code de plusieurs manières:

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.

CAS

L'instruction CASE est beaucoup plus stricte que la condition IF/ELSE . Il ne peut comparer qu'une seule variable et seulement une égalité, pas une plus petite / plus grande que etc.

DEFINE VARIABLE c AS CARACTERE NON-UNDO.

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

En utilisant un OR chaque WHEN peut comparer différentes valeurs:

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.

Tout comme avec l'information IF chaque branche peut être une seule instruction ou un bloc. Tout comme avec l' ELSE -Déclaration, OTHERWISE est pas obligatoire.

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.

Contrairement à un switch style c, il n'est pas nécessaire d'échapper à l'instruction CASE - une seule branche sera exécutée. Si plusieurs correspond à WHEN , seul le premier se déclenchera. OTHERWISE doit être dernier et ne se déclenchera que si aucune des branches ci-dessus ne correspond.

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-function

IF THEN ELSE peut également être utilisé comme une fonction pour renvoyer une seule valeur. C'est beaucoup comme le ternaire ? -opérateur de 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'utilisation de parenthèses peut faciliter la lisibilité du code comme celui-ci.

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

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

La valeur de la partie IF et la valeur de la partie ELSE doivent être du même type. Il n'est pas possible d'utiliser ELSE IF dans ce cas.

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

Plusieurs comparaisons peuvent être effectuées dans le IF :

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow