Este es el sitio web histórico de la documentación de 4D. La documentación se está trasladando progresivamente a developer.4d.com

Inicio

 
4D v19.8
Formula

Formula 


 

Formula ( formulaExp ) -> Resultado 
Parámetro Tipo   Descripción
formulaExp  Expresión in Fórmula a devolver como objeto
Resultado  Objeto in 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]"}



Ver también 

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

 
PROPIEDADES 

Producto: 4D
Tema: Fórmulas
Número 1597

This command can be run in preemptive processes

 
CONTENIDO DE LA PÁGINA 
 
HISTORIA 

Creado por: 4D v17 R3
Renombrar: 4D v17 R6 (Formula)

 
ARTICLE USAGE

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)