Un método o función puede tener parámetros opcionales. A veces se llama a la función con dos parámetros, y otras veces con tres parámetros. Todos hemos soñado con acceder a los parámetros sin contar los parámetros, comprobar si el parámetro ha sido pasado, o simplemente no tener que comprobar si la variable asociada al parámetro ha sido inicializada. Esto podría hacer el código mucho más simple, y mucho más legible, sin todas las líneas «If» o «Count parameters».
Pues bien, ¡no sueñe más y pase a 4D v19 R3! La gestión de los parámetros de métodos y funciones nunca ha sido tan fácil.
Acceda a los parámetros
Ahora, para los parámetros que haya declarado en el prototipo de una función o método, si el parámetro no se pasa durante la llamada, la variable se instanciará con el valor vacío. Incluso en modo compilado, ya no se produce un error en tiempo de ejecución por este motivo. En esta página de documentación, tienes una tabla con la correspondencia para cada tipo de variable.
En el siguiente ejemplo, la función utiliza los parámetros $param1 y $param2 sin una comprobación. Si al llamar a la función no se pasan los parámetros $param1 y/o $param2, 4D instanciará la variable texto a una cadena vacía:
// "concate" function class
Function concate ($param1 : Text ; $param2 : Text)
Alert($param1+" "+$param2)
// "method1" method
$class.concate("Hello";" world") // Display: "Hello world"
$class.concate("Hello") // Display: "Hello "
$class.concate() // Display: " "
Tenga cuidado. Para que 4D instancie su variable, necesita saber el tipo de esa variable. Si utiliza la notación ${i} y no ha pasado y declarado el parámetro, siempre obtendrá un error de ejecución en modo compilado.
Inicializar los parámetros
Acabamos de ver que si no se pasa un parámetro, su variable asociada se instala con el valor vacío. Así que ahora puedes usar el comando Choose para definir directamente un valor si no se pasa el parámetro.
Aquí hay un ejemplo con un método y la #DECLARE instrucción:
// "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"
¿Y los componentes?
Para beneficiarse de esta simplificación, el método llamado y el método llamante deben ser recompilados. Por lo tanto, en el caso de un método compartido entre la base anfitriona y un componente, ambos proyectos deben ser recompilados.
Pero, ¿qué pasa con los componentes compilados, cuyos fuentes no tengo? No te preocupes, puedes seguir utilizándolos como antes. No es necesario cambiar su código.
¿Qué es lo siguiente?
Esta nueva característica te da muchas ideas para tus métodos y funciones. No dudes en compartir tus consejos en el foro.