Parámetros
A menudo encontrará que necesita pasar datos a sus métodos y funciones. Esto se hace fácilmente con parámetros.
Generalidades
Los parámetros (o argumentos) son piezas de datos que un método o una función de clase necesita para realizar su tarea. Los términos parámetros y argumentos se utilizan indistintamente en este manual. Los parámetros también se pasan a los comandos integrados de 4D. En este ejemplo, la cadena "Hello" es un argumento para el comando integrado ALERT
:
ALERT("Hello")
Los parámetros se pasan de la misma manera a los métodos o las funciones de clase. Por ejemplo, si una función de clase llamada getArea()
acepta dos parámetros, una llamada a la función de clase podría verse así:
$area:=$o.getArea(50;100)
O, si un método proyecto llamado DO_SOMETHING
acepta tres parámetros, una llamada al método podría verse así:
DO_SOMETHING($WithThis;$AndThat;$ThisWay)
Los parámetros de entrada están separados por punto y coma (;).
Los mismos principios se aplican cuando los métodos se ejecutan a través de comandos dedicados, por ejemplo:
EXECUTE METHOD IN SUBFORM("Cal2";"SetCalendarDate";*;!05/05/20!)
//pass the !05/05/20! date as parameter to the SetCalendarDate
//in the context of a subform
//pase la fecha !05/05/20! como parámetro de SetCalendarDate
//en el contexto de un subformulario
Los datos también pueden ser devueltosdesde métodos y funciones de clase. Por ejemplo, la siguiente línea de instrucción utiliza el comando integrado, Length
, para devolver la longitud de una cadena. La instrucción pone el valor devuelto por Length
en una variable llamada MyLength. Esta es la instrucción:
MyLength:=Length("How did I get here?")
Toda subrutina puede devolver un valor. Sólo se puede declarar un único parámetro de salida por método o función de clase.
Los valores de entrada y salida son evaluados en el momento de la llamada y copiados en o desde variables locales dentro de la función o método de la clase llamada. Los parámetros variables deben ser declarados en el código llamado.
A lo largo de la documentación de 4D, puede ver ejemplos en los que los parámetros se copian automáticamente en variables locales numeradas secuencialmente ($0, $1, etc.) y se declaran utilizando directivas del compilador. Ej: C_TEXT($1;$2)
. Esta sintaxis heredada sigue siendo compatible, pero ya no se recomienda.
Declaración de parámetros
En los métodos llamados o en las funciones de clase, los valores de los parámetros se asignan a las variables locales. Generalmente se declararan los parámetros utilizando un nombre de parámetro con un tipo de parámetro, separados por dos puntos.
- Para las funciones de clase, los parámetros se declaran junto con la palabra clave
Function
. - Para los métodos (métodos proyecto, métodos objeto formulario, métodos base y triggers), los parámetros se declaran utilizando la palabra clave
#DECLARE
al principio del código del método.
Ejemplos:
Function getArea($width : Integer; $height : Integer) -> $area : Integer
//myProjectMethod
#DECLARE ($i : Integer) -> $myResult : Object
Se aplican las siguientes reglas:
- La línea de declaración debe ser la primera línea del código del método o de la función, de lo contrario se mostrará un error (sólo los comentarios o los saltos de línea pueden preceder la declaración).
- Los nombres de los parámetros deben comenzar con un carácter
$
y cumplir con reglas de denominación de las propiedades. - Múltiples parámetros (y tipos) están separados por punto y coma (;).
- Las sintaxis multilínea están soportadas (utilizando el carácter "\").
Por ejemplo, cuando se llama a una función getArea()
con dos parámetros:
$area:=$o.getArea(50;100)
En el código de la función clase, el valor de cada parámetro se copia en el parámetro declarado correspondiente:
// Class: Polygon
Function getArea($width : Integer; $height : Integer)-> $area : Integer
$area:=$width*$height
Si no se define el tipo, el parámetro se definirá como
Variant
.
Todos los tipos de métodos de 4D soportan la palabra clave #DECLARE
, incluidos los métodos base. Por ejemplo, en el método base On Web Authentication
, puede declarar parámetros temporales:
// Método base On Web Authentication
#DECLARE ($url : Text; $header : Text; \
$BrowserIP : Text; $ServerIP : Text; \
$user : Text; $password : Text) \
-> $RequestAccepted : Boolean
$entitySelection:=ds.User.query("login=:1"; $user)
// Verificar la contraseña hash...
Valor devuelto
El parámetro de retorno de una función se declara añadiendo una flecha (->) y la definición del parámetro después de la lista de parámetros de entrada. Por ejemplo:
Function add($x : Variant; $y : Integer) -> $result : Integer
También puede declarar el parámetro de retorno añadiendo sólo : type
, en cuyo caso puede ser manejado por un return. Por ejemplo:
Function add($x : Variant; $y : Integer): Integer
return $x+$y
Los parámetros, que incluyen el valor devuelto, deben declararse una sola vez. En particular, no se puede declarar el mismo parámetro como entrada y salida, incluso con el mismo tipo. Por ejemplo:
///declaración inválida
myTransform de función ($x : Integerto) -> $x : Integer
//error: $x se declara dos veces
Tipos de datos soportados
Con los parámetros con nombre, puede utilizar los mismos tipos de datos soportados por la palabra clave var
, incluidos los objetos de las clases. Por ejemplo:
Function saveToFile($entity : cs.ShapesEntity; $file : 4D.File)
Las expresiones de tablas o arrays sólo pueden pasarse como referencia utilizando un puntero.
Inicialización
Cuando se declaran los parámetros, se inicializan con el valor por defecto correspondiente a su tipo, que mantendrán durante la sesión mientras no hayan sido asignados.
return {expression}
Histórico
Lanzamiento | Modificaciones |
---|---|
19 R4 | Añadidos |
La instrucción return
finaliza la ejecución de una función o de un método y puede utilizarse para devolver una expresión a quien la llama.
Por ejemplo, la siguiente función devuelve el cuadrado de su argumento, $x, donde $x es un número.
Function square($x : Integer)
return $x * $x
Internamente,
return x
ejecuta$0:=x
o (si se declara)myReturnValue:=x
, y devuelve al llamante. Sireturn
se utiliza sin una expresión, la función o el método devuelve un valor nulo del tipo de retorno declarado (si lo hay), de lo contrario undefined.
La instrucción return
puede utilizarse junto con la sintaxis estándar para los valores devueltos (el valor devuelto debe ser del tipo declarado). Sin embargo, hay que tener en cuenta que termina inmediatamente la ejecución del código. Por ejemplo:
Function getValue
$0:=10
return 20
// devuelve 20
Function getValue -> $v : Integer
return 10
$v:=20 // nunca se ejecuta
// devuelve 10
Indirección de parámetros (${N})
Los métodos proyecto 4D aceptan un número variable de parámetros. Puede dirigirse a esos parámetros con un bucle For...End for
, el comando Count parameters
y la sintaxis de indirección de parámetros. Dentro del método, una dirección de indirección tiene el formato ${N}
, donde N
es una expresión numérica. ${N}
se denomina parámetro genérico.
Utilización de los parámetros genéricos
Por ejemplo, considere un método que suma valores y devuelve la suma formateada según un formato que se pasa como parámetro. Cada vez que se llama a este método, el número de valores a sumar puede variar. Debemos pasar los valores como parámetros al método y el formato en forma de cadena de caracteres. El número de valores puede variar de una llamada a otra.
Aquí está el método, llamado MySum
:
#DECLARE($format : Text) -> $result : Text
$sum:=0
For($i;2;Count parameters)
$sum:=$sum+${$i}
End for
$result:=String($sum;$format)
Los parámetros del método deben pasarse en el orden correcto, primero el formato y luego un número variable de valores:
Result:=MySum("##0.00";125,2;33,5;24) //"182.70"
Result:=MySum("000";1;2;200) //"203"
Tenga en cuenta que aunque haya declarado 0, 1 o más parámetros en el método, siempre puede pasar el número de parámetros que desee. Los parámetros están disponibles dentro del método llamado a través de la sintaxis ${N}
y el tipo de los parámetros extra es Variant por defecto (puede declararlos utilizando una directiva del compilador). Sólo hay que asegurarse de que los parámetros existen, gracias al comando Count parameters
. Por ejemplo:
//método foo
#DECLARE($p1: Text;$p2 : Text; $p3 : Date)
For($i;1;Count parameters)
ALERT("param "+String($i)+" = "+String(${$i}))
End for
Este método se puede llamar:
foo("hello";"world";!01/01/2021!;42;?12:00:00?) //extra parameters are passed //se pasan parámetros adicionales
La indirección de parámetros se gestiona mejor si se respeta la siguiente convención: si sólo algunos de los parámetros se dirigen por indirección, deben pasarse después de los demás.