Usina BRAdvPL Guia
Entrar
← Todos os tópicos
FUNDAMENTOPublicado

Tipagem de dados em AdvPL

Local <variável> As <tipo> · Function <nome>(<parâmetro> As <tipo>) As <tipo>

Declare tipos de variáveis, parâmetros, retornos, propriedades e métodos para tornar inconsistências mais visíveis.

Tipos de dadosVariáveisFunçõesClassesCompilação
01 · VISÃO GERAL

Visão geral

AdvPL possui tipagem dinâmica, mas permite declarar tipos explicitamente em fontes .PRW. Essas anotações ajudam o compilador e o AppServer a identificar atribuições, parâmetros e retornos incompatíveis. Os tipos documentados são numeric, character, date, codeblock, logical, array, object e variadic. A tipagem de TLPP possui recursos próprios e deve ser consultada separadamente.

02 · SINTAXE

Sintaxe

Local <variável> As <tipo> · Function <nome>(<parâmetro> As <tipo>) As <tipo>

Parâmetros

numeric
NOpcional

Valores numéricos inteiros ou decimais, positivos ou negativos.

character / char
COpcional

Cadeias de caracteres.

date
DOpcional

Valores de data.

codeblock / block
BOpcional

Blocos de código que podem ser avaliados em execução.

logical
LOpcional

Valores lógicos verdadeiro (.T.) ou falso (.F.).

array
AOpcional

Matrizes que podem reunir valores e estruturas.

object
OOpcional

Instâncias de classes ou objetos de interface.

variadic
HOpcional

Parâmetros de quantidade variável em funções.

03 · EXEMPLO PRÁTICO

Variáveis locais tipadas

User Function ExTipos()
    Local cMensagem As Character
    Local nQuantidade As Numeric
    Local dHoje As Date
    Local lAtivo As Logical
    Local aItens As Array

    cMensagem  := "Cadastro disponível"
    nQuantidade := 3
    dHoje       := Date()
    lAtivo      := .T.
    aItens      := {"A", "B", "C"}

    If lAtivo
        MsgInfo(cMensagem + " - itens: " + CValToChar(nQuantidade))
    EndIf
Return
Resultado esperado

Cada variável declara o tipo esperado, facilitando a leitura e a identificação de atribuições incompatíveis.

04 · EXEMPLO PRÁTICO

Parâmetro e retorno tipados

User Function TotalPedido(nValor As Numeric, nQuantidade As Numeric) As Numeric
    Local nTotal As Numeric

    nTotal := nValor * nQuantidade
Return nTotal
Resultado esperado

O protótipo documenta que os dois parâmetros e o retorno são numéricos.

05 · EXEMPLO PRÁTICO

Propriedade e método de classe

Class Pedido
    Data nTotal As Numeric
    Method New(nValor As Numeric) As Object
EndClass

Method New(nValor As Numeric) Class Pedido
    ::nTotal := nValor
Return Self
Resultado esperado

A propriedade, o parâmetro e o retorno do construtor têm seus tipos declarados.

06 · EXEMPLO PRÁTICO

Incompatibilidade detectável

User Function ExIncompativel()
    Local cCodigo As Character
    Local nTotal  As Numeric

    nTotal  := "ABC"
    cCodigo := 10
Return
Resultado esperado

O compilador pode emitir o aviso W0015 para as conversões incompatíveis entre C e N. O correto é ajustar a origem ou converter o valor conscientemente.

BOAS PRÁTICAS
  • Use As <tipo> em variáveis locais, parâmetros, retornos de funções, propriedades e métodos de classes.
  • A tipagem explícita melhora a leitura do contrato da rotina e permite que o compilador emita avisos de incompatibilidade.
  • Em chamadas tipadas, o AppServer também compara o tipo recebido com o protótipo definido.
  • A referência oficial informa como requisitos históricos AppServer e pré-processador a partir de dezembro de 2014; confirme o comportamento na versão utilizada.
ARMADILHAS COMUNS
  • Avisos de compilação não devem ser ignorados: uma atribuição character para numeric, ou o inverso, indica divergência real no contrato declarado.
  • Segundo a documentação, um parâmetro incompatível pode chegar à rotina como NIL, produzir aviso no console e alterar o fluxo esperado.
  • Não confunda a tipagem de arquivos .PRW com a tipagem de TLPP (.tlpp), que possui avanços e documentação própria.
  • Tipagem explícita não elimina a necessidade de validar NIL, conteúdo, intervalo e regras de negócio.

Conteúdos relacionados

REFERÊNCIAS
  1. TOTVS. Tipagem de Dados. TDN. Criado por Thays Tagliaferri de Grazia; última alteração por Cristiano Lino Felicio em 25 ago. 2021.
Situação
Publicado
Página criada em
Última revisão em
Idioma original
Português
Revisão
Usina.BR