Este é o site histórico da documentação 4D. As documentações estão sendo movidas progressivamente para developer.4d.com |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v19.8
Formula
|
Formula ( formulaExp ) -> Resultado | ||||||||
Parâmetro | Tipo | Descrição | ||||||
formulaExp | Expression |
![]() |
Fórmula a ser retornada como objeto | |||||
Resultado | Objeto |
![]() |
Objeto nativo encapsulando a fórmula | |||||
Formula cria um objeto fórmula baseado na expressão formulaExp. formulaExp pode ser tão simples quanto um único valor ou complexo, como um método projeto com parâmetros.
Ter uma fórmula como objeto permite que seja passado como um parâmetro (atributo calculado) a comandos ou métodos ou que se ja executado desde vários componentes sem necessidade de declará-los como "compartidlhaos pelos componentes e o banco de dados local". Quando for chamado, o objeto fórmula é avaliado dentro do contexto do banco de dados ou do componente que o criou.
A fórmula devolvida pode ser chamada com:
C_OBJECT($f)
$f:=New formula(1+2)
$o:=New object("myFormula";$f)
//três formas diferentes de chamar à fórmula
$f.call($o) //devolve 3
$f.apply($o) //devolve 3
$o.myFormula() //devolve 3
Pode especificar o objeto sobre o qual seja executado a fórmula, como se vê abaixo no Exemplo 5. Depois, pode acessas às propriedades do objeto mediante o comando This .
Se formulaExp utilizar variáveis locais, seus valores são copiados e armazenados no objeto de fórmula devolvido quando for criado. Quando for executada, a fórmula utiliza estes valores copiados ao invés do valor atual das variáveis locais.
O objeto criado por Formula pode ser guardado, por exemplo, em um campo de banco de dados ou em um documento blob.
Pode passar parâmetros à fórmula utilizando o mecanismo padrão $1, $2...,$n. Por exemplo, é possível escrever:
C_OBJECT($f)
$f:=New formula($1+" "+$2)
$text:=$f.call(Null;"Hello";"World") //devolve "Hello World"
$text:=$f.call(Null;"Welcome to ";String(Year of(Current date))) //devolve "Welcome to 2019" (por exemplo)
Para maior comodidade, os parâmetros podem ser omitidos na inicialização do objeto fórmula quando a fórmula estiver composta de um único método projeto. Só podem ser passadas quando a fórmula for chamada. Por exemplo:
C_OBJECT($f)
$f:=New formula(myMethod)
//Não é necessário escrever New formula(myMethod($1;$2)
$text:=$f.call(Null;"Hello";"World") //devolve "Hello World"
$text:=$f.call() //devolve "How are you?"
//myMethod
C_TEXT($0;$1;$2)
If(Count parameters=2)
$0:=$1+" "+$2
Else
$0:="How are you?"
End if
Os parâmetros são recebidos em $1, $2... dentro do método, na ordem em que foram especificadas na chamada.
Nota: não confunda os parâmetros $n utilizados na fórmula com os parâmetros $n recebidos no método chamado method na fórmula.
Uma fórmula simples:
C_OBJECT($f)
$f:=New formula(1+2)
C_OBJECT($o)
$o:=New object("f";$f)
$result:=$o.f() // devolve 3
Uma fórmula que utiliza variáveis locais:
$value:=10
$o:=New object("f";New formula($value))
$value:=20
$result:=$o.f() // devolve10
Uma fórmula simples que utiliza parâmetros:
$o:=New object("f";Formula($1+$2))
$result:=$o.f(10;20) //retorna 30
Uma fórmula que utiliza um método projeto com parâmetros:
$o:=New object("f";New formula(myMethod))
$result:=$o.f("param1";"param2") // equivalente a
$result:=myMethod("param1";"param2")
Utilizando This :
$o:=New object("fullName";New formula(This.firstName+" "+This.lastName))
$o.firstName:="John"
$o.lastName:="Smith"
$result:=$o.fullName() //devolve "John Smith"
Chamar uma fórmula utilizando a notação 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:=New formula(This.total:=This.price*This.quantity)
//define a fórmula para as propriedades de objeto
$feta.calc:=$calc
$robot.calc:=$calc
//chamar a 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
Produto: 4D
Tema: Fórmulas
Número
1597
Criado por: 4D v17 R3
Renomear: 4D v17 R6 (Formula)
Manual de linguagem 4D ( 4D v19)
Manual de linguagem 4D ( 4D v19.1)
Manual de linguagem 4D ( 4D v19.4)
Manual de linguagem 4D ( 4D v19.5)
Manual de linguagem 4D ( 4D v19.6)
Manual de linguagem 4D ( 4D v19.7)
Manual de linguagem 4D ( 4D v19.8)