Comme de nombreux autres langages de programmation, 4D offre la possibilité d’itérer sur des nombres avec une instruction For(…) / End for ou sur une condition grâce à l’instruction While(…)/End while et Repeat/Until(…) . Ces itérations (ou boucles) sont très utiles, mais ne sont pas le moyen le plus approprié pour itérer sur des types de données avancés tels que les collections et les sélections d’entités. C’est pourquoi le nouvel For each(…)/End for each a été créé, pour faciliter votre codage !
Bouclage des éléments de la collection THROUGH
L’instruction For each / End for each peut être utilisée dans plusieurs cas. L’un d’eux consiste à parcourir en boucle les éléments d’une collection. Il n’est pas nécessaire de savoir à l’avance combien d’ éléments appartiennent à la collection avant d’entrer dans la boucle. A chaque itération, la variable passée en premier paramètre(item) sera remplie avec l’élément courant de la collection(col).
col:=New collection("charlie" ; "delta" ; "uniform" ; "foxtrot" ; "quebec")
$count :=0
For each (item;col)
If (Length(item)>5)
$count :=$count+1
End if
End for each
ALERT(
String($count)+" mots trouvés !")
Boucle à travers les entités
Le deuxième cas est également le plus récent : le bouclage à travers les entités d’une sélection d’entités. Les entités et les sélections d’entités font partie d’un nouveau concept dans 4D, décrit dans cet article de blog. La principale chose que vous devez savoir est que les entités sont similaires aux enregistrements, et que les sélections d’entités peuvent être comparées aux sélections traditionnelles , mais elles sont toutes deux déclarées comme des objets!
Encore une fois, il n’est pas nécessaire de savoir combien d’entités appartiennent à la sélection d’entités avant d’entrer dans la boucle. A chaque itération, la variable entité passée en premier paramètre sera automatiquement remplie avec l’entité courante de la sélection d’entités.
UK_emps:=ds.Employees.query("country='UK'")
// Browse the entity selection
For each (emp;UK_emps)
emp. salary :=emp.salary*1.03 // raise the salary
emp .save() // save the result
End for each
Boucler sur les propriétés d’un objet
L’instruction For each / End for each peut également être utilisée dans un autre cas : le passage en boucle des propriétés d’un objet. Par exemple, elle peut être très utile dans le cas où vous voulez écrire du code générique, sans connaître à l’avance les noms des propriétés de l’objet.
Encore une fois, il n’est pas nécessaire de connaître à l’avance le nombre de propriétés d’un objet avant d’entrer dans la boucle ! Tous les noms de ses propriétés seront analysés un par un! A chaque itération, la variable passée en premier paramètre(property dans l’exemple ci-dessous) sera remplie avec le nom de l’attribut de l’objet($contact dans l’exemple ci-dessous).
For each ($property;$contact)
If (Value type($contact[$property])=Is text)
//Change to uppercase each attribute which is a text
$contact[$property]:=Uppercase($contact[$property])
End if
End for each