Este es el sitio web histórico de la documentación de 4D. La documentación se está trasladando progresivamente a developer.4d.com |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v19.8
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]"}
4D Blog - Formula: More power behind simplicity
4D Blog - Formula: Think outside the box
4D Blog - Write your own methods for objects
Formula from string
formula.source
Producto: 4D
Tema: Fórmulas
Número
1597
Creado por: 4D v17 R3
Renombrar: 4D v17 R6 (Formula)
Manual de lenguaje 4D ( 4D v19)
Manual de lenguaje 4D ( 4D v19.1)
Manual de lenguaje 4D ( 4D v19.4)
Manual de lenguaje 4D ( 4D v19.5)
Manual de lenguaje 4D ( 4D v19.6)
Manual de lenguaje 4D ( 4D v19.7)
Manual de lenguaje 4D ( 4D v19.8)