Function
Um objeto 4D.Function
contém um trecho de código que pode ser executado a partir de um objeto, usando o operador ()
, ou usando as funções apply()
e call()
. 4D propõe três tipos de objetos Function
:
- as funções nativas, ou seja, funções incorporadas de várias classes 4D, como
collection.sort()
oufile.copyTo()
. - as funções usuário, criadas nas [classes usuário] (Concepts/classes.md) usando a palavra-chave Function.
- funções de fórmula, ou seja, funções que podem executar qualquer fórmula 4D.
Objetos de formulários
Os comandos Formula e Formula from string permitem que você crie objetos4D.Function
para executar qualquer expressão ou código 4D expresso como texto.
Objetos formulário podem ser encapsulados em propriedades objeto:
var $f : 4D. Function
$f:=New object
$f.message:=Formula(ALERT("Hello world"))
Essa propriedade é uma "função objeto" ou seja uma função que é restrita a seu objeto pai. Para executar uma função armazenada em uma propriedade objeto, use o operador () depois do nome propriedade, tal como:
$f.message() //exibe "Hello world"
Também se admite a sintaxe com parênteses:
$f["message"]() //exibe "Hello world"
Note que mesmo se não tiver parênteses (ver abaixo), uma função objeto a ser executada deve ser chamda com () parênteses. Chamar só a propriedade de objeto devolverá uma nova referência à fórmula (e não a executará):
$o:=$f.message //devolve o objeto fórmula em $o
Você também pode executar uma função usando as funções apply()
e call()
:
$f.message.apply() //exibe "Hello world"
Utilização de parâmetros
Você pode passar parâmetros para suas fórmulas usando a sintaxe sequencial do parâmetro com base em $1, $2...$n. Por exemplo, pode escrever:
var $f : Object
$f:=New object
$f.message:=Formula(ALERT("Hello "+$1))
$f.message("John") //exibe "Hello John"
Ou usando a função .call():
var $f : Object
$f:=Formula($1+" "+$2)
$text:=$f.call(Null;"Hello";"World") //retorna "Hello World"
$text:=$f.call(Null;"Welcome to";String(Year of(Current date))) //retorna "Welcome to 2019" (por exemplo)
Parâmetros a um único método
Para mais conveniência, quando a fórmula é feita de um único método de projeto, parâmetros podem ser omitidos na inicialização do objeto fórmula. Pode ser passado quando a fórmula for chamada. Por exemplo:
var $f : 4D.Function
$f:=Formula(myMethod)
//Escrevendo Formula(myMethod($1;$2)) não é necessário
$text:=$f.call(Null;"Hello";"World") //retorna "Hello World"
$text:=$f.call() //retorna "How are you?"
//myMethod
#DECLARE ($param1 : Text; $param2 : Text)->$return : Text
If(Count parameters=2)
$return:=$param1+" "+$param2
Else
$return:="How are you?"
End if
Parâmetros são recebidos dentro do método, na ordem que são especificados na chamada.
Resumo
.apply() : any .apply( thisObj : Object { ; formulaParams : Collection } ) : any executa o objeto formula ao qual ele é aplicado e retorna o valor resultante |
.call() : any .call( thisObj : Object { ; ...params : any } ) : any executa o objeto formula ao qual ele está aplicado e retorna o valor resultante |
.source : Text contém a expressão de origem da fórmula como texto |
.apply()
História
Release | Mudanças |
---|---|
17 R3 | Adicionado |
.apply() : any
.apply( thisObj : Object { ; formulaParams : Collection } ) : any
Parâmetro | Tipo | Descrição | |
---|---|---|---|
thisObj | Object | -> | Objeto a ser retornado pelo comando This na fórmula |
formulaParams | Collection | -> | Collection of values to be passed as $1...$n when formula is executed |
Resultados | any | <- | Valores de execução de fórmula |
Descrição
A função .apply()
executa o objeto formula
ao qual ele é aplicado e retorna o valor resultante. The formula object can be created using the Formula
or Formula from string
commands.
In the thisObj parameter, you can pass a reference to the object to be used as This
within the formula.
You can also pass a collection to be used as $1...$n parameters in the formula using the optional formulaParams parameter.
Note que .apply()
é similar a .call()
exceto que os parâmetros são passados como coleção. Isso pode ser útil para passar resultados calculados. Isso pode ser útil para passar resultados calculados.
Exemplo 1
var $f : 4D. Function
$f:=Formula($1+$2+$3)
$c:=New collection(10;20;30)
$result:=$f.apply(Null;$c) // retorna 60
Exemplo 2
var $calc : 4D. Function
var $feta; $robot : Object
$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)
$calc.apply($feta) // $feta={name:Feta,price:12.5,quantity:5,total:62.5}
$calc.apply($robot) // $robot={name:Robot,price:543,quantity:2,total:1086}
.call()
História
Release | Mudanças |
---|---|
17 R3 | Adicionado |
.call() : any
.call( thisObj : Object { ; ...params : any } ) : any
Parâmetro | Tipo | Descrição | |
---|---|---|---|
thisObj | Object | -> | Objeto a ser retornado pelo comando This na fórmula |
params | any | -> | Valores a serem passados como $1...$n quando a fórmula for executada |
Resultados | any | <- | Valores de execução de fórmula |
Descrição
A função .call()
executa o objeto formula
ao qual ele está aplicado e retorna o valor resultante. The formula object can be created using the Formula
or Formula from string
commands.
In the thisObj parameter, you can pass a reference to the object to be used as This
within the formula.
Você também pode passar valores para serem usados como parâmetros $1...$n na fórmula usando os parâmetros params opcionais.
Observe que .call()
é semelhante a .apply()
, exceto pelo fato de que os parâmetros são passados diretamente.
Exemplo 1
var $f : 4D. Function
$f:=Formula(Uppercase($1))
$result:=$f.call(Null;"hello") // retorna "HELLO"
Exemplo 2
$o:=New object("value";50)
$f:=Formula(This.value*2)
$result:=$f.call($o) // devolve 100
.source
História
Release | Mudanças |
---|---|
18 R2 | Adicionado |
.source : Text
Descrição
A propriedade .source
contém a expressão de origem da fórmula
como texto.
Essa propriedade é somente leitura.
Exemplo
var $of : 4D.Function
var $tf : Text
$of:=Formula(String(Current time;HH MM AM PM))
$tf:=$of.source //"String(Current time;HH MM AM PM)"