Une méthode ou une fonction peut avoir des paramètres facultatifs. Parfois la fonction est appelée avec deux paramètres, d’autres fois avec trois paramètres. Nous avons tous rêvé d’accéder aux paramètres sans compter les paramètres, sans vérifier si le paramètre a été passé, ou simplement sans avoir à vérifier si la variable associée au paramètre a été initialisée. Cela pourrait rendre le code beaucoup plus simple, et beaucoup plus lisible, sans toutes les lignes « If » ou « Count parameters ».
Eh bien, ne rêvez plus, et passez à 4D v19 R3 ! La gestion des paramètres des méthodes et des fonctions n’a jamais été aussi simple.
Accédez aux paramètres
Désormais, pour les paramètres que vous avez déclarés dans le prototype d’une fonction ou d’une méthode, si le paramètre n’est pas passé lors de l’appel, la variable est instanciée à la valeur vide. Même en mode compilé, vous n’avez plus d’erreur d’exécution pour cela. Sur cette page de documentation, vous avez un tableau avec la correspondance pour chaque type de variable.
Dans l’exemple suivant, la fonction utilise les paramètres $param1 et $param2 sans vérification. Si, lors de l’appel de la fonction, les paramètres $param1 et/ou $param2 ne sont pas passés, 4D instancie la variable texte à une chaîne vide :
// "concate" function class
Function concate ( : ; : ) ( + ""+ ) $param1 Text $param2 Text
Alert$param1$param2
// "method1" method
$class. ("Hello" ; "world") concate // Display: "Hello world"
$class . ("Bonjour") concate // Display: "Hello "
.$class
()concate // Display: " "
Attention. Pour que 4D puisse instancier votre variable, il doit connaître le type de cette variable. Si vous utilisez la notation ${i} et que vous n’avez pas passé et déclaré le paramètre, vous obtiendrez toujours une erreur d’exécution en mode compilé.
Initialiser les paramètres
Nous venons de voir que si un paramètre n’est pas passé, sa variable associée est instanciée à la valeur vide. Vous pouvez donc maintenant utiliser la commande Choose pour définir directement une valeur si le paramètre n’est pas passé.
Voici un exemple avec une méthode et l #DECLARE instruction :
// "myAlert" method
()
#DECLARE($param1: Text; $param2: Text)
$param1 :=Choose(Count parameters>=1 ; $param1; "Hello")
$param2 :=Choose(Count parameters>=2 ; $param2; "world")
Alert ($param1+" "+$param2)
// "method1" method
myAlert // Display: "Hello world"
Qu’en est-il des composants ?
Pour bénéficier de cette simplification, la méthode appelée et la méthode appelante doivent être recompilées. Ainsi, dans le cas d’une méthode partagée entre la base hôte et un composant, les deux projets doivent être recompilés.
Mais, qu’en est-il des composants compilés, dont je n’ai pas les sources ? Ne vous inquiétez pas, vous pouvez toujours les utiliser comme avant. Il n’est pas nécessaire de modifier votre code.
Quelle est la prochaine étape ?
Cette nouvelle fonctionnalité vous donne plein d’idées pour vos méthodes et fonctions. N’hésitez pas à partager vos astuces sur le forum.