Qual a forma básica de dar tipos aos parâmetros?
Function name (parm1 as type1, parm2 as type2, ..., parmN as typeN) Visite os Tipos Nativos.
Bloco de código |
---|
language | java |
---|
title | Exemplo - Declaração de parâmetros tipados |
---|
| Function typedFunc(parm1 as Numeric, parm2 as Character) as Variant
|
Quais são as checagens feitas em relação aos parâmetros? Existem dois momentos em que a consistência dos parâmetros é checada: - Em tempo de compilação
- Estando a função ou método no mesmo fonte, o compilador observa se a quantidade de argumentos passados é coerente;
- Se os tipos dos argumentos passados são compatíveis com os tipos declarados.
- Em tempo de execução
- Realiza os mesmos tratamentos de tempo de compilação, mas com potencial de olhar também funções ou métodos que foram definidos em outros fontes.
Bloco de código |
---|
language | java |
---|
title | Exemplo - Checagem de Parâmetros |
---|
| Function typedFunc(nVar as Numeric, cVar as Character) as Logical
Local lVar as Logical
lVar := IIF(cVar == "TLPP", .T., .F.) as LogicallVar := lVar .AND. (nVar == 1)
Return lVar
Function Test()Local lVar as Logical
lVar := typedFunc(2, "TLPP") // Compilação OK
lVar := typedFunc("TLPP", 2) // Erro de Compilação (deveria ser Numeric e depois Character)
lVar := typedFunc(1) // Erro de Compilação (poucos argumentos passados)
Return .T. |
Agora considere uma função f2, que tenha sido declarada em um fonte diferente daquele onde a Function Test foi desenvolvida. Admita ainda que a function f2 tenha a seguinte linha declarativa:
Function f2(nVar as Date)
Bloco de código |
---|
language | java |
---|
title | Exemplo - Função com retorno incompatível |
---|
| Function Test()Local dVar := date() as Date
Local cVar := dtos(dVar)
f2(dVar) // Ok, sem problemas
f2(cVar) // Valendo-se da tipagem, dará erro em tempo de execução.
Return .T. |
No exemplo anterior, o runtime faz-se valer da tipagem dos parâmetros para acusar erro na segunda chamada a f2. É importante frisar que esse erro acontece no ato da chamada da função, podendo antecipar problemas que só viriam à tona em um nível mais profundo da stack de execução.
|