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 verifica se a quantidade de argumentos passados é coerente;
- Se verifica se os tipos dos argumentos passados são compatíveis com os tipos declarados.
- Em tempo de execução
- Realiza realiza os mesmos tratamentos de tempo de compilação;
- tem 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 - Função com retorno compatívelChecagem de Parâmetros em Tempo de Compilação |
---|
| Function typedFunc(nVar as Numeric, cVar as Character) as NumericLogical
Local nVar lVar as Logical
lVar := IIF(cVar = 10 as Numeric
Return nVar |
Bloco de código |
---|
language | java |
---|
title | Exemplo - Função com retorno incompatível |
---|
| Function typedFunc() as Numeric
Local cVar := "I Love TLPP"
Return cVar // ERRO DE COMPILAÇÃO (Função Numeric tentando retornar um Character) |
E o compilador também vai olhar as chamadas de funções? Sim, o compilador também vai ficar atento a isso. No atual estágio, se a função chamada estiver no mesmo fonte, poderemos checar eventuais inconsistências de tipos. = "TLPP", .T., .F.)
lVar := 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
lVar := typedFunc(1) // Erro de Compilação
Return .T. |
Agora, considere uma função f2 declarada em um fonte diferente de Function Test. 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ívelChecagem de Parâmetros em Tempo de Execução |
---|
| Function typedFuncTest() as Numeric
Local nVardVar := 10 as Numeric
Return nVar
Function typedTestdate() as LogicalDate
Local cVar := "I Love TLPP" dtos(dVar) as Character
Localf2(dVar) cResult as Character
cResult := cVar + typedFunc() // ERRO DE COMPILAÇÃO (typedFunc é Numeric e, portanto, não pode ser somada a cVar, que é Character.
Return .T// 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.
|