Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
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

hoje o compilador apresenta as mesmas tratativas de checagem de tipos para funções ou métodos.
Isso quer dizer que ele vai olhar:

  • se o retorno do método é compatível com o tipo declarado;
  • se as chamadas àquele método, quando conhecido estaticamente o seu "Self", são compatíveis com a expressão em que a chamada faz parte. 

Recomenda-se visitar Tipando Funções.

Section

Qual a forma básica de declarar um método tipado?

Deve-se mencionar o tipo na parte declarativa (estrutura da classe) e também na implementação do método, conforme exemplo seguinte.

Sugere-se visitar os Tipos Nativos.


Bloco de código
languagejava
titleExemplo - Método Tipado
#include "tlpp-object.th"
Class tMyClass
Public Method New() as Object
Public Method myMethod () as Numeric
EndClass

Public Method New() as Object class tMyClass as Object
Return Self

Public Method myMethod () as Numeric class tMyClass as Numeric
Return 10



O compilador checa se o retorno da função é compatível com o seu tipo declaradoA checagem de métodos está no mesmo estágio que a checagem de funções?
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. 

Bloco de código
languagejava
titleExemplo - Função com retorno compatível
Function typedFunc() as Numeric
Local nVar := 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.

Bloco de código
languagejava
titleExemplo - Função com retorno incompatível