Formula
Los objetos 4D.Formula son creados por los comandos Formula o Formula from string y le permiten ejecutar cualquier expresión 4D o código expresado como texto de una sola línea.
Los objetos de la clase 4D.Formula heredan de la clase 4D.Function. Así, para ejecutar la fórmula, puede:
- almacenar un objeto
4D.Formulaen una propiedad de objeto y utilizar el operador()después del nombre de la propiedad, - o llamar directamente al objeto
4D.Formulausando la funcióncall()oapply()sobre él.
Ver ejemplos en el párrafo Ejecución de código en los objetos Function.
Esta clase es streamable en binario.
Pasar parámetros a fórmulas
Puede pasar parámetros a sus fórmulas utilizando una sintaxis secuencial de parámetros basada en $1, $2,...,$n. La numeración de los parámetros $ representa el orden en que se pasarán a la fórmula. Por ejemplo, puede escribir:
$f:={mensaje: Formula(ALERT("Hello "+$2+", "+$1))}
$f.message("Juan"; "Smith") //muestra "Hello Smith, Juan"
O utilizando la función .call():
var $f : 4D.Formula
$f:=Formula($1+" "+$2)
$text:=$f.call(Null;"Hello";"World") //devuelve "Hello World"
$text:=$f.call(Null;"Welcome to";String(Year of(Current date))) //devuelve "Welcome to 2026" (por ejemplo)
Parámetros de un solo método
Para mayor comodidad, cuando la fórmula se compone de un único método proyecto, se pueden omitir los parámetros en la inicialización del objeto fórmula. Simplemente se pueden pasar la fórmula se llama. Por ejemplo:
var $f : 4D.Formula
$f:=Formula(myMethod)
//Escribir Formula(myMethod($1;$2)) no es necesario
$text:=$f.call(Null;"Hello";"World") //devuelve "Hello World"
$text:=$f.call() //devuelve "How are you?"
//myMethod
#DECLARE ($param1 : Text; $param2 : Text)->$return : Text
If(Count parameters=2)
$return:=$param1+" "+$param2
Else
$return:="How are you?"
End if
Los parámetros se reciben en el método, en el orden en que se especifican en la llamada.
Objeto fórmula
| .apply() : any .apply( thisObj : Object { ; params : Collection } ) : any ejecuta el objeto función al que se aplica, pasando los parámetros como una colección, y devuelve el valor resultante |
| .call() : any .call( thisObj : Object { ; ...params : any } ) : any ejecuta el objeto función al que se aplica, con uno o más parámetros pasados directamente, y devuelve el valor resultante |
| .source : Text contiene el código fuente de la función como texto |
.apply()
Historia
| Lanzamiento | Modificaciones |
|---|---|
| 21 R3 | Soporte de objetos 4D.Methods |
| 17 R3 | Añadidos |
.apply() : any
.apply( thisObj : Object { ; params : Collection } ) : any
| Parámetros | Tipo | Descripción | |
|---|---|---|---|
| thisObj | Object | -> | Objeto a devolver por el comando This en la función |
| params | Collection | -> | Colección de valores que se pasarán como parámetros a la función |
| Resultado | any | <- | Valor de la ejecución de la función |
Descripción
La función .apply() ejecuta el objeto función al que se aplica, pasando los parámetros como una colección, y devuelve el valor resultante.
En el parámetro thisObj, puede pasar una referencia al objeto que se utilizará como This en la función. Pasa Null si no quiere utilizar This pero quiere enviar parámetros.
Puede pasar una colección para utilizarla como parámetros en la función utilizando el parámetro opcional params:
- en los objetos
4D.Formula, los parámetros se pasan en $1...$n en la fórmula. - en los otros objetos
4D.Functioncomo los objetos4D.Method, los parámetros se pasan en parámetros declarados.
Tenga en cuenta que .apply() es similar a .call() excepto que los parámetros se pasan como una colección. Esto puede ser útil para pasar los resultados calculados.
Ejemplo 1
var $f : 4D.Formula
$f:=Formula($1+$2+$3)
$c:=New collection(10;20;30)
$result:=$f.apply(Null;$c) // devuelve 60
Ejemplo 2
var $calc : 4D.Formula
var $feta; $robot : Object
$robot:=New object("name";"Robot";"price";543;"quantity";2)
$feta:=New object("name";"Feta";"price";12.5;"quantity";5)
$calc:=Formula(This.total:=This.price*This.quantity)
$calc.apply($feta) // $feta={name:Feta,price:12.5,quantity:5,total:62.5}
$calc.apply($robot) // $robot={name:Robot,price:543,quantity:2,total:1086}
.call()
Historia
| Lanzamiento | Modificaciones |
|---|---|
| 21 R3 | Soporte de objetos 4D.Methods |
| 17 R3 | Añadidos |
.call() : any
.call( thisObj : Object { ; ...params : any } ) : any
| Parámetros | Tipo | Descripción | |
|---|---|---|---|
| thisObj | Object | -> | Objeto a devolver por el comando This en la función |
| params | any | -> | Valores a pasar como parámetros a la función |
| Resultado | any | <- | Valor de la ejecución de la función |
Descripción
La función .call() ejecuta el objeto función al que se aplica, con uno o más parámetros pasados directamente, y devuelve el valor resultante.
En el parámetro thisObj, puede pasar una referencia al objeto que se utilizará como This en la función.
Puede pasar valores que se utilizarán como parámetros en la función utilizando el parámetro opcional params:
- en los objetos
4D.Formula, los parámetros se pasan en $1...$n en la fórmula. - en los objetos
4D.Method, los parámetros se pasan en parámetros declarados.
Tenga en cuenta que .call() es similar a .apply() excepto que los parámetros se pasan directamente.
Ejemplo 1
var $f : 4D.Formula
$f:=Formula(Uppercase($1))
$result:=$f.call(Null;"hello") // devuelve "HELLO"
Ejemplo 2
$o:=New object("value";50)
$f:=Formula(This.value*2)
$result:=$f.call($o) // devuelve 100
.source
Historia
| Lanzamiento | Modificaciones |
|---|---|
| 21 R3 | Soporte de objetos 4D.Methods |
| 18 R2 | Añadidos |
.source : Text
Descripción
La propiedad .source contiene el código fuente de la función como texto.
El valor devuelto es el texto original utilizado para crear el objeto 4D.Formula o 4D.Method pero reformateado.
Esta propiedad es de solo lectura.
Ejemplo
var $of : 4D.Formula
var $tf : Text
$of:=Formula(String(Current time;HH MM AM PM))
$tf:=$of.source //"String(Current time;HH MM AM PM)"