Qual a forma básica de declarar um método tipado?
Como sabido, a definição de um método segue dois passos.
No primeiro, declara-se o método
Class tMyClass
Public Method name (parameters) as Type
EndClass
Visite os Tipos Nativos.
Class tMyClass Public Method New() as Object Public Method myMethod () as Numeric EndClass Public Method New() class tMyClass as Object Return Self Public Method myMethod () class tMyClass as Numeric Return 10
O compilador checa se o retorno da função é compatível com o seu tipo declarado?
Sim, o compilador verifica e está bem atento a isso, para que a qualidade dos produtos Protheus seja cada vez melhor.
Os exemplos seguintes retratam, respectivamente, uma função sem erros de compilação e outra com erro de retorno.
Function typedFunc() as Numeric Local nVar := 10 as Numeric Return nVar
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.
Function typedFunc() as Numeric Local nVar := 10 as Numeric Return nVar Function typedTest() as Logical Local cVar := "I Love TLPP" as Character Local 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.