Árvore de páginas

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.


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:

  1. Em tempo de compilação
    1.  verifica se a quantidade de argumentos passados é coerente;
    2. verifica se os tipos dos argumentos passados são compatíveis com os tipos declarados.

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


Exemplo - Checagem de Parâmetros em Tempo de Compilação
Function typedFunc(nVar as Numeric, cVar as Character) as Logical
Local lVar as Logical
lVar := IIF(cVar == "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)

Exemplo - Checagem de Parâmetros em Tempo de Execução
Function Test()
Local dVar := date() as Date
Local cVar := dtos(dVar) as Character
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.

  • Sem rótulos