Code opération RPG III / RPG/400 · IBM i (AS/400) · Structures de contrôle
LEAVE
Sortir d'une boucle
Quitte immédiatement la boucle DO, DOWxx ou DOUxx la plus interne et reprend après son END.
Syntaxe
C LEAVE
- Indicateurs de conditionnement (9-17)
- Permettent de sortir sous condition, sans
IFxxautour. - Facteurs et zone résultat
- Aucun : l'opération s'écrit seule sur sa ligne.
- Effet
- Aucun indicateur positionné. L'exécution reprend à la ligne qui suit le
ENDde la boucle la plus interne ; les zones gardent leur valeur du moment.
À quoi ça sert
LEAVE sert à arrêter une recherche dès que la réponse est connue : premier client débiteur, première ligne qui ne convient pas, erreur à signaler. La boucle garde une condition simple et la sortie anticipée se lit sur une ligne.
Exemple 1 : Arrêter la lecture au premier débiteur
H* LEAVE : sortir d'une boucle de lecture des qu'on a trouve
FCLIENT3 IF E K DISK
C READ CLIENT3 90
C *IN90 DOWEQ'0'
C SOLDE IFLT 0
C NOM DSPLY
C LEAVE
C END
C 'Suivant' DSPLY
C READ CLIENT3 90
C END
C* Le programme continue ici, le fichier n'est pas arrive a la fin
C *IN90 DSPLY
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
Suivant
Suivant
Leroy SARL
0
Le programme affiche « Suivant » pour Dupont SA et Martin et fils, puis Leroy SARL (solde négatif) déclenche le LEAVE. Le fichier n'est pas à la fin : *IN90 vaut 0.
Exemple 2 : Boucles imbriquées
H* LEAVE : boucles imbriquees, seule la boucle interne est quittee
C DO 3 I 10
C I DSPLY
C DO 3 J 10
C J IFEQ 2
C LEAVE
C END
C J DSPLY
C END
C END
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
1
1
2
1
3
1
Pour chaque valeur de I, la boucle interne affiche J = 1 puis fait LEAVE à J = 2. La boucle externe continue : on voit 1, 1, 2, 1, 3, 1 (I puis J).
Le piège
LEAVE ne quitte que la boucle la plus interne : dans le deuxième exemple, la boucle externe ne s'arrête pas. Pour tout quitter, positionnez un indicateur et testez-le après la boucle interne.
Il lui faut une boucle. Un LEAVE hors de toute boucle est refusé : QRG5232, gravité 20, « Aucune opération DO, DOUxx ou DOWxx associée à l'opération LEAVE ou ITER. »
En RPG ILE full free
L'instruction LEAVE existe à l'identique en RPG ILE full free, avec la même portée (boucle la plus interne).
dow not %eof(client3);
if solde < 0;
dsply nom;
leave;
endif;
read client3;
enddo;