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:
- Em tempo de compilação
- verifica se a quantidade de argumentos passados é coerente;
- verifica 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;
- 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.
Visão Geral
Import HTML Content
Conteúdo das Ferramentas