Na declaração de uma função ou método, defina explicitamente os seus parâmetros. Depois, ao chamar essa função ou método, pode passar-lhe menos parâmetros, se alguns forem opcionais. Ou, se utilizou a declaração com ${n}, o número de parâmetros passados é variável. Neste caso, utiliza-se a função Count Parameters com um loop sobre os argumentos. Este código funciona sem falhas. Ainda assim, é um pouco pesado.
Pediu-nos uma forma mais leve de lidar com os parâmetros, e nós ouvimos. Começando com 4D v19 R5, fornecemos-lhe um novo comando, Copy parameters, permitindo-lhe escrever um código sem costura, mais elegante, e mais fácil de ler.
Novo comando
O novo comando, Copy parametersdevolve uma colecção dos parâmetros passados a uma função ou a um método. Se passar o “startFrom” para o parâmetro Copy parameters devolve uma colecção que contém o elemento do índice “startFrom“.
Exemplos
Manipular os parâmetros como uma colecção. Por exemplo, concatenar uma cadeia com os parâmetros para criar uma lista HTML desordenada:
// Class
)
Function list
() -> $html: Text
var $value : Collection $value :=Copy parameters
$html :="<ul><li>"
$html +=$value.join("</li><li>")
$html +="</li></ul>"
return $html
// Method
$htmlList :=$c.list("Alfa"; "Bravo"; "Charlie"
// $htmlList: <ul><li>Alpha</li><li>Bravo</li><li>Charlie</li></ul>
Chamar uma função diferente dependendo do primeiro parâmetro e passar os outros parâmetros para este método:
Function selectTask($task: Text)
Case of
: ($task="Task1")
This .task1(Copy parameters(2)))
: ($task="Task2")
This .task2(Copy parameters(2)))
End case
Ou, chamar outra função sobre outro objecto com apply() e passar os parâmetros:
Function doSomething($param: Text; $extraParameters: Variant)
This .delegate.doSomething.apply(This.delegate; Copy parameters)
Próximo
Pode ler a documentação para mais informações. Não hesite em partilhar as suas ideias e exemplos no fórum.