Este é o site histórico da documentação 4D. As documentações estão sendo movidas progressivamente para developer.4d.com

Página Inicial

 
4D v19.8
Formula

Formula 


 

Formula ( formulaExp ) -> Resultado 
Parâmetro Tipo   Descrição
formulaExp  Expression in Fórmula a ser retornada como objeto
Resultado  Objeto in 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]"}

 



Ver também 

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

 
PROPRIEDADES 

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

This command can be run in preemptive processes

 
CONTEÚDO DA PÁGINA 
 
HISTÓRIA 

Criado por: 4D v17 R3
Renomear: 4D v17 R6 (Formula)

 
ARTICLE USAGE

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)