4D v18Formula |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v18
Formula
|
Formula ( formulaExp ) -> Resultado | ||||||||
Parámetro | Tipo | Descripción | ||||||
formulaExp | Expresión |
![]() |
Fórmula a devolver como objeto | |||||
Resultado | Objeto |
![]() |
Objeto nativo encapsulando la fórmula | |||||
Formula crea un objeto fórmula basado en la expresión formulaExp. formulaExp puede ser tan simple como un único valor o complejo, como un método proyecto con parámetros.
Tener una fórmula como objeto permite que se pase como un parámetro (atributo calculado) a comandos o métodos o que se ejecute desde varios componentes sin necesidad de declararlos como "compartidos por los componentes y la base local". Cuando se llama, el objeto fórmula se evalúa dentro del contexto de la base de datos o del componente que lo creó.
La fórmula devuelta se puede llamar con:
C_OBJECT($f)
$f:=New formula(1+2)
$o:=New object("myFormula";$f)
//tres formas diferentes de llamar a la fórmula
$f.call($o) //devuelve 3
$f.apply($o) //devuelve 3
$o.myFormula() //devuelve 3
Puede especificar el objeto sobre el que se ejecuta la fórmula, como se ve a continuación en el Ejemplo 5. A continuación, se puede acceder a las propiedades del objeto mediante el comando This .
Si formulaExp utiliza variables locales, sus valores se copian y almacenan en el objeto de fórmula devuelto cuando se crea. Cuando se ejecuta, la fórmula utiliza estos valores copiados en lugar del valor actual de las variables locales. Note que no se soporta utilizar arrays como variables locales.
El objeto creado por Formula se puede guardar, por ejemplo, en un campo de base de datos o en un documento blob.
Puede pasar parámetros a la fórmula utilizando el mecanismo estándar $1, $2...,$n. Por ejemplo, puedes escribir:
C_OBJECT($f)
$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 2019" (for example)
Para mayor comodidad, los parámetros pueden omitirse en la inicialización del objeto fórmula cuando la fórmula está compuesta de un único método proyecto. Solo se pueden pasar cuando se llama a la fórmula. Por ejemplo:
C_OBJECT($f)
$f:=Formula(myMethod)
//No es necesario escribir (myMethod($1;$2)
$text:=$f.call(Null;"Hello";"World") //devuelve "Hello World"
$text:=$f.call() //devuelve "How are you?"
//myMethod
C_TEXT($0;$1;$2)
If(Count parameters=2)
$0:=$1+" "+$2
Else
$0:="How are you?"
End if
Los parámetros se reciben en $1, $2... dentro del método, en el orden en que se especifican en la llamada.
Nota: no confunda los parámetros $n utilizados en la fórmula y los parámetros $n recibidos en el método llamado method en la fórmula.
Una fórmula simple:
C_OBJECT($f)
$f:=Formula(1+2)
C_OBJECT($o)
$o:=New object("f";$f)
$result:=$o.f() // devuelve 3
Una fórmula que utiliza variables locales:
$value:=10
$o:=New object("f";Formula($value))
$value:=20
$result:=$o.f() // devuelve 10
Una fórmula simple que utiliza parámetros:
$o:=New object("f";Formula($1+$2))
$result:=$o.f(10;20) //devuelve 30
Una fórmula que utiliza un método proyecto con parámetros:
$o:=New object("f";Formula(myMethod))
$result:=$o.f("param1";"param2") // equivalente a $result:=myMethod("param1";"param2")
Utilizando This :
$o:=New object("fullName";Formula(This.firstName+" "+This.lastName))
$o.firstName:="John"
$o.lastName:="Smith"
$result:=$o.fullName() //devuelve "John Smith"
Llamar a una fórmula utilizando la notación de objetos:
C_OBJECT($calc;$feta;$robot)
$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)
//define la fórmula para las propiedades del objeto
$feta.calc:=$calc
$robot.calc:=$calc
//llamar la fórmula
$feta.calc() // $feta={name:Feta,price:12.5,quantity:5,total:62.5,calc:"[object Formula]"}
$robot.calc() // $robot={name:Robot,price:543,quantity:2,total:1086,calc:"[object Formula]"}
Producto: 4D
Tema: Fórmulas
Número
1597
Creado por: 4D v17 R3
Renombrar: 4D v17 R6
Manual de lenguaje 4D ( 4D v18)