Stop à la presse ! Accéder à des paramètres qui ne sont pas passés est … possible

Traduit automatiquement de Deepl

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.

Vanessa Talbot
- Product Owner -Vanessa Talbot a rejoint l'équipe du programme 4D en juin 2014. En tant que Product Owner, elle est chargée de rédiger les user stories puis de les traduire en spécifications fonctionnelles. Son rôle est également de s'assurer que l'implémentation des fonctionnalités livrées répond aux besoins des clients.Depuis son arrivée, elle a travaillé à la définition des fonctionnalités clés de 4D. Elle a travaillé sur la plupart des nouvelles fonctionnalités de multithreading préemptif et aussi sur un sujet très complexe : la nouvelle architecture pour les applications enginées. Vanessa est diplômée de Telecom Saint-Etienne. Elle a commencé sa carrière à l'Institut de Recherche Criminelle en tant que développeur pour le département audiovisuel. Elle a également travaillé dans les domaines des médias et du médical en tant qu'experte en support technique, en production ainsi qu'en documentation de nouvelles fonctionnalités.