Saltar al contenido principal
Versión: Siguiente

Formula

4D.Formula objects are created by the Formula or Formula from string commands and allow you execute any 4D expression or code expressed as single-line text.

Los objetos de la clase 4D.Formula heredan de la clase 4D.Function. Así, para ejecutar la fórmula, puede:

  • store a 4D.Formula object in an object property and use the () operator after the property name,
  • o llamar directamente al objeto 4D.Formula usando la función call() o apply() sobre él.

Ver ejemplos en el párrafo Ejecución de código en los objetos Function.

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") //returns "Hello World"
$text:=$f.call(Null;"Welcome to";String(Year of(Current date))) //returns "Welcome to 2026" (for example)

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)
//Writing Formula(myMethod($1;$2)) is not necessary
$text:=$f.call(Null;"Hello";"World") //returns "Hello World"
$text:=$f.call() //returns "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

executes the function object to which it is applied, passing parameters as a collection, and returns the resulting value
.call() : any
.call( thisObj : Object { ; ...params : any } ) : any

executes the function object to which it is applied, with one or more parameter(s) passed directly, and returns the resulting value
.source : Text
contiene el código fuente de la función como texto

.apply()

Historia
LanzamientoModificaciones
21 R3Soporte de objetos 4D.Methods
17 R3Añadidos

.apply() : any
.apply( thisObj : Object { ; params : Collection } ) : any

ParámetrosTipoDescripción
thisObjObject->Object to be returned by the This command in the function
paramsCollection->Collection of values to be passed as parameters to the function
Resultadoany<-Valor de la ejecución de la función

Descripción

The .apply() function executes the function object to which it is applied, passing parameters as a collection, and returns the resulting value.

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.
  • in other 4D.Function objects such as 4D.Method objects, parameters are passed in declared method parameters.

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
LanzamientoModificaciones
21 R3Soporte de objetos 4D.Methods
17 R3Añadidos

.call() : any
.call( thisObj : Object { ; ...params : any } ) : any

ParámetrosTipoDescripción
thisObjObject->Object to be returned by the This command in the function
paramsany->Valores a pasar como parámetros a la función
Resultadoany<-Valor de la ejecución de la función

Descripción

The .call() function executes the function object to which it is applied, with one or more parameter(s) passed directly, and returns the resulting value.

En el parámetro thisObj, puede pasar una referencia al objeto que se utilizará como This en la función.

You can pass values to be used as parameters in the function using the optional params parameter:

  • 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") // returns "HELLO"

Ejemplo 2

 $o:=New object("value";50)
$f:=Formula(This.value*2)
$result:=$f.call($o) // devuelve 100

.source

Historia
LanzamientoModificaciones
21 R3Soporte de objetos 4D.Methods
18 R2Añ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)"