Saltar para o conteúdo principal
Versão: Próximo

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() ou file.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
ReleaseMudanças
17 R3Adicionado

.apply() : any
.apply( thisObj : Object { ; formulaParams : Collection } ) : any

ParâmetroTipoDescrição
thisObjObject->Objeto a ser retornado pelo comando This na fórmula
formulaParamsCollection->Collection of values to be passed as $1...$n when formula is executed
Resultadosany<-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
ReleaseMudanças
17 R3Adicionado

.call() : any
.call( thisObj : Object { ; ...params : any } ) : any

ParâmetroTipoDescrição
thisObjObject->Objeto a ser retornado pelo comando This na fórmula
paramsany->Valores a serem passados como $1...$n quando a fórmula for executada
Resultadosany<-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
ReleaseMudanças
18 R2Adicionado

.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)"