Dans la déclaration d’une fonction ou d’une méthode, vous définissez explicitement ses paramètres. Ensuite, lorsque vous appelez cette fonction ou cette méthode, vous pouvez lui passer moins de paramètres si certains sont facultatifs. Ou, si vous avez utilisé la déclaration avec ${n}, le nombre de paramètres passés est variable. Dans ce cas, vous utilisez la commande Count Parameters avec une boucle sur les arguments. Ce code fonctionne parfaitement. Pourtant, il est un peu lourd.
Vous nous avez demandé une façon plus légère de gérer les paramètres, et nous vous avons écouté. À partir de 4D v19 R5, nous vous fournissons une nouvelle commande, Copy parameters qui vous permet d’écrire un code transparent, plus élégant et plus facile à lire.
Voyez la nouvelle commande en action.
Nouvelle commande
La nouvelle commande , Copy parameters renvoie une collection des paramètres passés à une fonction ou à une méthode. Si vous passez le paramètre « startFrom » à la commande Copy parameters elle renvoie une collection qui contient l’élément de l’index « startFrom« .
Exemples
Manipulez les paramètres comme une collection. Par exemple, concaténer une chaîne de caractères avec les paramètres pour créer une liste HTML non ordonnée :
// Class
Function list() -> $html: Text
var $value : Collection
$value :=Copy parameters
$html := "<ul><li>"
$html +=$value.join("</li><li>")
$html += "</li></ul>"
return $html
// Method
$htmlList :=$c.list("Alpha" ; "Bravo" ; "Charlie")
// $htmlList: <ul><li>Alpha</li><li>Bravo</li><li>Charlie</li></ul>
Appelez une fonction différente en fonction du premier paramètre et passez les autres paramètres à cette méthode :
Function selectTask($task: Text)
Case of
: ($task= "Task1" )
This .task1(Copy parameters(2) )
: ($task= "Task2" )
This .task2(Copy parameters(2) )
End case
Ou bien, appelez une autre fonction sur un autre objet avec apply() et passez les paramètres :
Function doSomething($param: Text; $extraParameters: Variant)
This .delegate.doSomething.apply(This.delegate; Copy parameters)
Suivant
Vous pouvez lire la documentation pour plus d’informations. N’hésitez pas à partager vos idées et vos exemples sur le forum.