Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Section

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
languagejava
titleExemplo - 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:

  1. Em tempo de compilação
    1. Estando a função ou método no mesmo fonte, o compilador observa  verifica se a quantidade de argumentos passados é coerente;
    2. Se verifica se os tipos dos argumentos passados são compatíveis com os tipos declarados.

  2. Em tempo de execução
    1. Realiza realiza os mesmos tratamentos de tempo de compilação;
    2. tem o , mas com potencial de olhar também funções ou métodos que foram definidos em outros fontes.


Bloco de código
languagejava
titleExemplo - 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
languagejava
titleExemplo - 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
languagejava
titleExemplo - 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.