IF
Si
En bref
La commande IF permet d'évaluer une expression logique et, selon le résultat, d'exécuter ou non des commandes dans un programme CL ou une procédure CL ILE.
Syntaxe minimale
IF COND(…)
Paramètres
Astuce : dans une session 5250, tapez IF puis F4 pour
l'invite de saisie, et F1 sur un paramètre pour son aide.
Aide IBM i de la commande
Texte du F1, IBM i 7.5 en français
(bibliothèque QSYS)
Où s'exécute :
- Programme batch (*BPGM)
- Programme interactif (*IPGM)
La commande IF permet d'évaluer une expression logique et, selon le résultat, d'exécuter ou non des commandes dans un programme CL ou une procédure CL ILE. Si la condition de l'expression logique est vérifiée (1 logique), la commande ou le groupe de commandes (d'un groupe DO) indiqué dans le paramètre THEN est exécuté, tandis que la commande ELSE et la commande ou le groupe DO associé sont ignorés. Si la condition de l'expression logique n'est pas vérifiée (0 logique), la commande indiquée au paramètre THEN est ignorée et le contrôle passe à la commande suivante. Si celle-ci est une commande ELSE, la commande ou le groupe DO qu'elle contient est exécuté. Si aucune commande ELSE n'est spécifiée, le contrôle passe à la commande suivante.
Lorsqu'une commande DO est indiquée (au paramètre THEN, dans la commande IF ou au paramètre CMD de la commande ELSE), le groupe DO est ignoré si le résultat de l'expression n'est pas celui requis pour le groupe en cours de traitement. Cela signifie que le contrôle passe à la commande qui suit la commande ENDDO associée à ce groupe DO.
Lorsque le traitement de la commande ou du groupe DO indiqué au paramètre THEN ou dans la commande ELSE est terminé (alors qu'aucune commande GOTO n'a été traitée), le contrôle passe à la commande qui suit la commande ou le groupe DO indiqué dans la commande ELSE. Si une commande GOTO est traitée, le contrôle passe à la commande contenant le label spécifié dans la commande GOTO et le traitement se poursuit à partir de cette commande.
La séquence de commandes suivante illustre ce flot. Dans cet exemple, &TESTSW est une variable logique.
IF &TESTSW DO
Groupe A (groupe de commandes CL)
.
.
ENDDO
ELSE DO
Groupe B (groupe de commandes CL)
.
.
ENDDO
Groupe C (suite des commandes CL)
.
.
La commande IF teste la variable logique &TESTSW. Si la condition est vérifiée (&TESTSW contenant la valeur 1), les commandes du groupe A sont exécutées et le contrôle passe aux commandes du groupe C. Si la condition n'est pas vérifiée (&TESTW contenant la valeur 0), les commandes du groupe A sont ignorées et celles du groupe B, exécutées. Le contrôle passe ensuite aux commandes du groupe C.
Restrictions :
- La commande IF est valide uniquement dans un programme CL ou une procédure CL ILE.
- Vous pouvez indiquer jusqu'à dix niveaux de commandes IF et ELSE imbriquées.
Condition (COND)
Indique l'expression logique à utiliser pour déterminer une condition dans le programme et définir le traitement qui doit s'ensuivre. Pour obtenir la description des expressions logiques, reportez-vous à la rubrique correspondante du manuel Rubriques CL de la catégorie Programmation de l'IBM i Information Center, à l'adresse http://www.ibm.com/systems/i/infocenter/. Notez que ces dernières peuvent contenir des variables, des constantes et les fonctions intégrées %SUBSTRING, %SWITCH et %BINARY.
Pour déterminer si une valeur NULL a été affectée à un pointeur, la variable de pointeur CL peut être comparée à la valeur spéciale *NULL, sous réserve que le source CL soit compilé avec la commande CRTCLMOD (Créer un module CL) ou la commande CRTBNDCL (Créer un programme CL lié). Si le source CL est compilé avec la commande CRTCLPGM (Créer un programme CL), comparez la variable de pointeur CL à une autre variable de pointeur CL qui a été déclarée avec ADDRESS(*NULL) et n'a pas été modifiée.
Ce paramètre est obligatoire.
- valeur-logique
- Indiquez le nom d'une variable logique CL ou une expression logique.
Commande (THEN)
Indique la commande ou le groupe de commandes (dans un groupe DO) à exécuter si l'expression logique est vérifiée. Après cette exécution, le contrôle passe à la commande qui figure après la commande ELSE associée à cette commande IF. Si l'expression est vérifiée, la commande ELSE associée à la commande IF n'est pas exécutée. Si la commande indiquée à ce paramètre est une commande DO, toutes les commandes du groupe DO sont considérées comme étant la commande spécifiée au paramètre.
Si la commande indiquée avec le mot clé THEN ne figure pas sur la même ligne que le mot clé, celui-ci doit être immédiatement suivi, sur la même ligne, de la parenthèse ouvrante et d'un signe plus (+) ou moins (-) pour permettre la continuation. (Aucun mot clé ne peut être suivi d'un blanc.) La commande et la parenthèse fermante peuvent dans ce cas être indiquées sur la ligne suivante. Par exemple :
IF COND(&A *EQ &B) THEN( + GOTO C)
Si une partie de la commande indiquée au paramètre THEN est fractionnée sur la ligne suivante, un caractère de continuation (+ ou -) doit être entré.
Si vous indiquez une commande DO, entourez uniquement celle-ci de parenthèses (et non les autres commandes faisant partie du groupe DO). Par exemple :
IF COND(&A *EQ &B) THEN(DO)
CMD1
CMD2
.
.
ENDDO
Lorsqu'aucune commande n'est indiquée pour le paramètre THEN (THEN indéfini) et qu'il est immédiatement suivi de la commande ELSE, celle-ci est exécutée si l'expression IF n'est pas vérifiée ; et ignorée, si l'expression est vérifiée.
Vous pouvez indiquer toute commande CL pour le paramètre THEN, sauf les commandes suivantes :
- ELSE
- PGM, ENDPGM
- ENDDO
- MONMSG
- DCL, DCLF
- WHEN, OTHERWISE, ENDSELECT
Vous pouvez indiquer une autre commande IF, sauf si des commandes IF et ELSE sont déjà spécifiées sur dix niveaux d'imbrication.
Exemples
IF COND(&A *EQ &B) THEN(GOTO X) IF (&A *EQ &B) THEN(GOTO X) IF (&A *EQ &B) (GOTO X) IF COND(&A *EQ &B) THEN(GOTO X)
Les exemples ci-dessus illustrent plusieurs possibilités d'indication de la commande IF pour tester une condition et se reporter à un label. Dans chacun de ces exemples, si &A est égal à &B, le contrôle passe à une commande CL ayant pour label X.
IF COND(&TESTSW) THEN(CHGVAR VAR(&A) VALUE(23))
Si &TESTSW a pour valeur logique 1 (vrai), la commande CHGVAR est traitée pour donner la valeur décimale 23 à &A ; si &TESTW a pour valeur logique 0 (non vrai), la commande CHGVAR n'est pas traitée.
IF COND((&ALPHA *EQ &BETA) *AND *NOT &GAMMA)
THEN(RETURN)
Si la valeur de &ALPHA est égale à celle de &BETA et si &GAMMA a pour valeur logique 0, il y a retour au programme ou à la procédure qui a appelé ce programme CL ou cette procédure CL ILE.
IF &LOG1 THEN(IF (&A *GT 10) THEN(GOTO X))
ELSE(GOTO Y)
ELSE DO
: (groupe de commandes CL)
ENDDO
Ceci est un exemple de commandes IF imbriquées. Si &LOG1 a pour valeur logique 1 (vrai) et si &A est supérieur à 10, une branche est établie avec le label X. Si &LOG1 a pour valeur logique 1 et &A n'est pas supérieur à 10, une branche est établie avec le label Y. Si &LOG1 a pour valeur logique 0 (faux), &A n'est pas comparé à 10. A la place, le groupe DO de la seconde commande ELSE est traité.
IF &TEST THEN(DO) CHGVAR &A (&A + 1) GOTO X ENDDO ELSE DO CHGVAR &B (&B + 1) CALL EXTPGM (&B) ENDDO
Cet exemple illustre comment poursuivre le paramètre THEN à la ligne suivante. Si &TEST a pour valeur logique 1, le groupe DO indiqué dans le paramètre THEN est traité. Dans le cas contraire, le groupe DO indiqué par la commande ELSE est traité.
IF (&A *EQ YES) DO CHGVAR &B 1 CHGVAR &C 'Z' ENDDO
Cet exemple illustre un groupe DO en tant que paramètre THEN. Les deux commandes CHGVAR (Modifier une variable) sont traitées si, dans l'expression relationnelle, &A est égal à YES.
IF %SWITCH(10XXXX10) THEN(GOTO X)
Cet exemple illustre comment la fonction intégrée %SWITCH est utilisée pour tester les huit indicateurs externes dans un travail. Pour obtenir une description de %SWITCH, reportez-vous à la section "Built-in functions for CL" dans la rubrique Rubriques CL de la catégorie Programmation de l'IBM i Information Center, à l'adresse http://www.ibm.com/systems/i/infocenter/. Dans cet exemple, les indicateurs externes 1, 2, 7 et 8 sont testés pour retrouver les valeurs indiquées dans le masque à huit caractères. Si les indicateurs 1 et 7 comportent des valeurs 1 et si les indicateurs 2 et 8 comportent des valeurs 0, le contrôle passe à la commande ayant pour label X. Si l'un de ces quatre indicateurs ne contient pas la valeur indiquée, la branche n'est pas établie.
DCL &NULLPTR *PTR ADDRESS(*NULL) IF COND(&PTRVAR *EQ *NULL) THEN(GOTO X) IF COND(&PTRVAR *EQ &NULLPTR) THEN(GOTO X)
Cet exemple indique deux moyens de déterminer si la variable de pointeur &PTRVAR comporte une valeur NULL. La variable de pointeur peut être comparée à la valeur spéciale *NULL, sous réserve que le source CL soit compilé avec la commande CRTCLMOD (Créer un module CL) ou la commande CRTBNDCL (Créer un programme CL lié). Si le source CL est compilé avec la commande CRTCLPGM (Créer un programme CL), la variable de pointeur CL peut être comparée à une autre variable de pointeur CL, comme par exemple &NULLPTR, qui a été déclarée avec ADDRESS(*NULL) et n'a pas été modifiée.
© Copyright IBM Corp. Texte d'aide reproduit à des fins de formation.