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

Function

A 4D.Function object contains a piece of code that can be executed from an object, either using the () operator, or using the apply() and call() functions. 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

The Formula and Formula from string commands allow you to create 4D.Function objects to execute any 4D expression or code expressed as text.

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

You can pass parameters to your formulas using the sequential parameter syntax based upon $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)
//Writing Formula(myMethod($1;$2)) is not necessary
$text:=$f.call(Null;"Hello";"World") //returns "Hello World"
$text:=$f.call() //returns "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

executes the formula object to which it is applied and returns the resulting value
.call() : any
.call( thisObj : Object { ; ...params : any } ) : any

executes the formula object to which it is applied and returns the resulting value
.source : Text
contains the source expression of the formula as text

.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

The .apply() function executes the formula object to which it is applied and returns the resulting value. 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 that .apply() is similar to .call() except that parameters are passed as a collection. 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

The .call() function executes the formula object to which it is applied and returns the resulting value. 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

The .source property contains the source expression of the formula as text.

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