Parâmetros
Frequentemente será preciso passar dados para seus métodos. Isso é facilmente feito com parâmetros.
Visão Geral
Os parâmetros (ou argumentos) são partes de dados que um método ou uma função de classe precisa para executar sua tarefa. Os termos parâmetro e argumento são usados de forma intercambiável ao longo deste manual. Parâmetros também são passados para comandos integrados 4D. Neste exemplo, a cadeia de caracteres "Hello" é um argumento para o comando interno ALERT
:
ALERT("Hello")
Os parâmetros são passados aos métodos da mesma maneira. Por exemplo, se uma função de classe chamada getArea()
aceita dois parâmetros, uma chamada para a função de classe pode se parecer com isso:
$area:=$o.getArea(50;100)
Ou, se um método de projeto chamado DO_SOMETHING
aceitar três parâmetros, uma chamada ao método poderá ter a seguinte aparência:
Essa função é chamada da maneira abaixo:
Os parâmetros estão separados por ponto e vírgula (;).
Os mesmos princípios são usados quando métodos forem executados através de comandos dedicados, por exemplo:
EXECUTE METHOD IN SUBFORM("Cal2"; "SetCalendarDate";*;!05/05/20!)
//passa a data !05/05/20! como parâmetro para SetCalendarDate
//no contexto de um subformulário
Os dados também podem ser retornados a partir de métodos e funções de classe. Por exemplo, a linha a seguir é uma instrução que usa o comando interno, Length
, para retornar o comprimento de uma cadeia de caracteres. A instrução coloca o valor retornado por Length
em uma variável chamada MyLength. Esta é a instrução:
MyLength:=Length("How did I get here?")
Qualquer subrotina pode retornar um valor. Só se pode declarar um único parámetro de saída por método ou função de classe.
Os valores de entrada e saída são avaliados no momento da chamada e copiados para ou de variáveis locais dentro da função ou método da classe chamada. Os parâmetros das variáveis devem ser [declarados] (#declaring-parameters) no código chamado.
The legacy declaration syntax, where parameters are automatically copied in sequentially numbered local variables $0, $1, etc. and declared using compiler directives such as C_TEXT($1;$2)
, is deprecated as of 4D 20 R7.
Declaração de parâmetros
Dentro de métodos ou funções de classe chamados, valores parâmetros são atribuidos à variáveis locais. Normalmente, você declara os parâmetros usando um nome do parâmetro junto com um tipo de parâmetro, separados por dois pontos.
- For class functions, parameters are declared along with the function prototype, i.e. when using the
Function
orClass Constructor
keywords. - Para métodos (métodos de projeto, métodos de objeto de formulário, métodos de banco de dados e acionadores), os parâmetros são declarados usando a palavra-chave
#DECLARE
no início do código do método.
Exemplos:
Function getArea($width : Integer; $height : Integer) -> $area : Integer
//myProjectMethod
#DECLARE ($i : Integer) -> $myResult : Object
As regras abaixo são válidas:
- A linha de declaração deve ser a primeira linha do método ou código da função, senão um erro é exibido (só comentários ou quebras de linha podem preceder a declaração).
- Os nomes dos parâmetros devem começar com um caractere
$
e estar em conformidade com as [regras de nomeação de propriedades] (identifiers.md#object-properties). - Os parâmetros (e tipos) múltiplos são separados por ponto e vírgula (;).
- Sintaxes multilinha são aceitas (usando "\").
Por exemplo, quando você chama uma função getArea()
com dois parâmetros:
$area:=$o.getArea(50;100)
No código da função classe, o valor de cada parâmetro se copia no parâmetro declarado correspondente:
// Class: Polygon
Function getArea($width : Integer; $height : Integer)-> $area : Integer
$area:=$width*$height
Se o tipo não for definido, o parâmetro será definido como [
Variant
] (dt_variant.md).
Todos los tipos de métodos de 4D soportan la palabra clave #DECLARE
, incluidos los métodos base. Por exemplo, no método de database On Web Authentication
, você pode declarar parâmetros nomeados:
// Método banco de dados On Web Authentication
#DECLARE ($url : Text; $header : Text; \
$BrowserIP : Text; $ServerIP : Text; \
$user : Text; $password : Text) \
-> $RequestAccepted : Boolean
$entitySelection:=ds.User.query("login=:1"; $user)
// Verificar a senha hash...
Valor retornado
Você declara o parâmetro de retorno de uma função adicionando uma seta (->) e a definição do parâmetro após a lista de parâmetros de entrada. Por exemplo:
Function add($x : Variant; $y : Integer) -> $result : Integer
Também é possível declarar o parâmetro de retorno apenas acrescentando : type
, caso em que pode ser tratado por uma declaração de retorno. Por exemplo:
Function add($x : Variant; $y : Integer): Integer
return $x+$y
Os parâmetros, que incluem o valor retornado, devem ser declarados apenas uma vez. Em particular, você não pode declarar o mesmo parâmetro como entrada e saída, mesmo com o mesmo tipo. Por exemplo:
//invalid declaration
Function myTransform ($x : Integer) -> $x : Integer
//error: $x is declared twice
Tipos de datos compatíveis
Com parâmetros nomeados, você pode usar os mesmos tipos de dados que são [suportados pela palavra-chave var
] (variables.md#using-the-var-keyword), incluindo objetos de classe. Por exemplo:
Function saveToFile($entity : cs. ShapesEntity; $file : 4D. File)
As tabelas ou expressões de matriz só podem ser passadas [como referência usando um ponteiro] (dt_pointer.md#pointers-as-parameters-to-methods).
Inicialização
Quando os parâmetros são declarados, eles são inicializados com o [valor padrão correspondente ao seu tipo] (data-types.md#default-values), que eles manterão durante a sessão, desde que não tenham sido atribuídos.
return {expression}
História
Release | Mudanças |
---|---|
19 R4 | Adicionado |
A instrução return
encerra a execução da função ou do método e pode ser usada para retornar uma expressão ao chamador.
Por exemplo, a seguinte função devolve o quadrado de seu argumento, $x, onde $x é um número.
Function square($x : Integer) -> $result : Integer
return $x * $x
Internally, return x
executes myReturnValue:=x
, and returns to the caller. Se return
for usado sem uma expressão, a função ou o método retornará um valor nulo do tipo de retorno declarado (se houver), caso contrário, indefinido.
A instrução return
pode ser usada junto com a sintaxe padrão para valores retornados (o valor retornado deve ser do tipo declarado). Entretanto lembre que isso finaliza imediatamente a execução de código. Por exemplo:
Function getValue -> $v : Integer
$v:=10
return 20
// returns 20
Function getValue -> $v : Integer
return 10
$v:=20 // never executed
// returns 10
Indireção dos parâmetros
Os métodos e funções 4D aceitam um número variável de parâmetros. Você pode abordar esses parâmetros com um loop For...End for
, o comando Count parameters
e a sintaxe de indireção de parâmetro. Dentro do método, um endereço de indireção é formatado ${N}
, onde N
é uma expressão numérica.