Aller au contenu

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

  • COND Condition obligatoire
  • THEN Commande

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)
Compatible multitâche : Oui

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.

Paramètres

Mot-clé Description Valeurs possibles Remarques
COND Condition Valeur logiqueLogical value Obligatoire, positionnel 1
THEN Commande Chaîne de commandeCommand string Facultatif, positionnel 2

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.

Messages d'erreur

Messages *ESCAPE

CPF0816
Valeur &1 incorrecte pour le masque %SWITCH.

© Copyright IBM Corp. Texte d'aide reproduit à des fins de formation.