Á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 declarar uma função tipada?

Function name (parâmetrosparameters) AS TYPE as Type


Visite os Tipos Nativos.

No atual estágio, Static Function, Main Function e Function podem ser tipadas, sem restrições.
A tipagem para User Function (e possivelmente outras formas) ainda está em processo de validação e homologação.

Bloco de código
languagejava
titleExemplo - Declaração básica de propriedades tipadas
Function typedFunc() as Numeric



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 de .
A seguir, observe uma função sem erros de compilação e outra com erro de retorno. 

Bloco de código
languagejava
titleExemplo - Propriedade tipada com valor inicialFunção com retorno compatível
Function typedFunc()Private nVar as Numeric init
Local nVar := 10
Public cVar as Character init 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"
Posso deixar uma propriedade sem definição de tipo ou dar um tipo de objeto específico?
Sim, de maneira idêntica ao que se faz com uma variável (veja Tipando Variáveis)
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.
Chamadas de funções declaradas no mesmo fonte passam pela checagem de tipos.


Bloco de código
languagejava
titleExemplo - Função com retorno incompatível
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.