4D v16.3Boucle...Fin de boucle |
||
|
4D v16.3
Boucle...Fin de boucle
Boucle...Fin de boucle
La syntaxe de la structure répétitive For...End for est la suivante : For(Variable_Compteur;Expression_Début;Expression_Fin{;Expression_Incrément}) La structure For...End for est une boucle contrôlée par un compteur :
Important : Les expressions numériques Expression_Début, Expression_Fin et Expression_Incrément sont évaluées une seule fois, au début de la boucle. Si ces expressions sont des variables, leur modification depuis l'intérieur de la boucle n'affectera pas l'exécution de la boucle. Astuce : En revanche, vous pouvez, si vous le souhaitez, modifier la valeur de la variable Variable_Compteur depuis l'intérieur de la boucle et cela affectera l'exécution de la boucle.
(1) La boucle suivante s'exécute 100 fois : For(vCompteur;1;100) (2) L'exemple suivant permet de traiter tous les éléments du tableau unTableau : For($vlElem;1;Size of array(unTableau)) (3) L'exemple suivant permet d'examiner chaque caractère du texte vtDuTexte : For($vlCar;1;Length(vtDuTexte)) (4) L'exemple suivant permet de traiter tous les enregistrements de la sélection de la table [uneTable]: FIRST RECORD([uneTable]) La plupart des structures For...End for que vous écrirez dans vos bases ressembleront à celles présentées ci-dessus. Dans certains cas, vous pouvez souhaiter disposer d'une boucle dont la valeur de la variable compteur décroît au lieu de croître. Pour cela, Expression_Début doit être supérieure à Expression_Fin et Expression_Increment doit être négative. Les exemples suivants effectuent les mêmes tâches que les précédents, mais en sens inverse : (5) La boucle suivante s'exécute 100 fois : For(vCompteur;100;1;-1) (6) L'exemple suivant permet de traiter tous les éléments du tableau unTableau : For($vlElem;Size of array(unTableau);1;-1) (7) L'exemple suivant permet d'examiner chaque caractère du texte vtDuTexte : For($vlCar;Length(vtDuTexte);1;-1) (8) L'exemple suivant permet de traiter tous les enregistrements de la sélection de la table [uneTable]: LAST RECORD([uneTable]) Si vous le souhaitez, vous pouvez passer dans Expression_Incrément une valeur (positive ou négative) dont la valeur absolue est supérieure à un. (9) La boucle suivante ne traite que les éléments pairs du tableau unTableau : For($vlElem;2;Size of array(unTableau);2) Dans certains cas, vous voudrez exécuter une boucle un certain nombre de fois, mais également pouvoir sortir si une autre condition devient Vraie. Pour cela, il vous suffit de tester cette condition à l'intérieur de la boucle et, si elle devient Vraie, de "forcer" la valeur de la variable compteur, de manière à ce qu'elle soit supérieure à celle de Expression_Fin. (10) Dans l'exemple suivant, vous effectuez une boucle parmi les enregistrements d'une sélection jusqu'à ce que la fin de la sélection soit atteinte, ou bien jusqu'à ce que la variable interprocess <>vbStop, initialement fixée à Faux, prenne la valeur Vrai. Cette variable est gérée par une méthode projet APPELER SUR EVENEMENT utilisée pour interrompre l'opération : <>vbStop:=False Reprenons le premier exemple employé pour la structure For...End for : (1) La boucle suivante s'exécute 100 fois : For(vCompteur;1;100) Il est intéressant d'examiner la manière dont les boucles Tant que...Fin tant que et Repeter...Jusque effectuent la même action : Voici la boucle Tant que...Fin tant que équivalente : $i :=1 ` Initialisation du compteur Voici la boucle Repeter...Jusque équivalente : $i :=1 ` Initialisation du compteur Astuce : La boucle For...End for est généralement plus rapide que les boucles Tant que...Fin tant que et Repeter...Jusque car 4D teste la condition en interne pour chaque cycle de la boucle et incrémente lui-même le compteur. Par conséquent, nous vous conseillons de préférer à chaque fois que c'est possible la structure For...End for. Vous pouvez utiliser comme compteur une variable interprocess, process ou locale, et lui attribuer le type Réel, Entier ou Entier long. Pour des boucles longues, et particulièrement en mode compilé, nous vous conseillons d'employer des variables locales de type Entier long. (11) Voici un exemple : C_LONGINT($vlCompteur) ` Utilisons une variable locale de type Entier long Vous pouvez emboîter autant de structures répétitives que vous voulez (dans les limites du raisonnable). Cela s'applique aux structures de type For...End for. Il y a dans ce cas une erreur courante à éviter : assurez-vous d'utiliser une variable compteur différente par structure de boucle. Voici deux exemples : (12) L'exemple suivant permet de traiter tous les éléments d'un tableau à deux dimensions : For($vlElem;1;Size of array(unTableau)) (13) L'exemple suivant construit un tableau de pointeurs vers tous les champs de type Date présents dans la base : ARRAY POINTER($apChampsDate;0)
Voir aussi
Case of...Else...End case
|
PROPRIÉTÉS
Produit : 4D
HISTORIQUE
UTILISATION DE L'ARTICLE
4D - Langage ( 4D v16) |