Des boucles, des boucles et … encore des boucles !

Traduit automatiquement de Deepl

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 !

Exemple de base de données

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

Roland Lannuzel
- Product Owner & 4D Expert - Après avoir étudié l'électronique, Roland s'est lancé dans l'informatique industrielle en tant que développeur et consultant, créant des solutions pour les clients avec une variété de bases de données et de technologies. À la fin des années 80, il est tombé amoureux de 4D et l'a utilisé pour écrire des applications commerciales, notamment des systèmes de comptabilité, de facturation et de messagerie électronique. Il a rejoint la société en 1997 et a contribué à la conception de spécifications, d'outils de test et de démonstrations, ainsi qu'à la formation et à la présentation de la communauté 4D lors de nombreuses conférences. Il continue à façonner activement l'avenir de 4D en définissant de nouvelles fonctionnalités et des outils de développement de bases de données.