Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Composition Setup
import.css=/download/attachments/327912/newLayout.css
Portuguese

Pagetitle
Tipagem de Dados
Tipagem de Dados

Tipagem de Dados


Abrangência:

 

Versão 12

 

Introdução

Índice

Requisitos

 

#introducao

minLevel

  • Tipos de Dados
  • Funções
  • Classes
  • Compilação
  • Execução
  • 3


    1. Introdução

     

    Este documento mostra a utilização da tipagem de dados na linguagem ADVPL.
    #requisitos 
    2. Requisitos

     

    Para a utilização dos recursos de tipagem de dados são necessários os requisitos:
    • TOTVS Appserver 2.0, binário a partir de dezembro/2014;
    • Pré-processador, dezembro 2014, atualizado no TDS;
    • Arquivos de include atualizados, dezembro/2014.
    #tiposdedados

    Âncora
    TipagemdeDados-3.TiposdeDados
    TipagemdeDados-3.TiposdeDados

    3. Tipos de Dados

     

    Os tipos de dados disponíveis são: numeric, character, date, codeblock, logical, array e object.
    Uma letra é utilizada para indicar cada tipo de dado, essa letra será mostrada nas mensagens de erro.

    Tipo

    Descrição

    Indicador

    numeric

    Utilizado para valores numéricos inteiros ou decimais, positivos ou negativos.

    N

    char / character

    Utilizado para valores do tipo caracter

    C

    date

    Utilizado para armenar datas

    D

    block / codeblock

    Armazena um bloco de código para macro execução

    B

    logical

    Armazena valores lógicos, verdadeiro (.T.) ou falso (.F.)

    L

    array

    Utilizado para armazenar uma matriz de valores

    A

    object

    Armazena objetos de interface ou classes

    O

     

    #funcoes

    4. Funções

     

    A criação de funções com o uso de tipagem de dados deve seguir a seguinte sintaxe:
     

    Function <Nome da Funcao>([<parametro1> as <Tipo1>, <paramentroN as <TipoN>]) [as <Tipo>]

    ...

    Return

     

    O <Nome da Funcao> deve seguir os mesmo critérios usados em uma função sem tipagem de dados.
    Cada parâmetro deve ser especificado com o tipo de dado desejado.O retorno da função também pode ter um tipo de dado indicado.

    #classes

    5. Classe

     

    A uso de tipo de dados em classes deve usar a seguinte sintaxe:

    Class <Nome da Classe>

     

          // Declaração de propriedades

          Data <nPropriedad1>[as <tipo>]

          Data <nPropriedad2>[as <tipo>]

         

          // Declaração de métodos

      Method New()       // Construtor, retorna Self

      Method <Nome do Método>([<Param1>, <Param2>,...,<ParamN>])[as <tipo>]

     

    EndClass

     

    // Construtor da Classe

    Method New() Class <Nome da Classe>

     

    Return Self

     

    // Definição de métodos

    Method <Nome do Método>(nParam1) Class <Nome da Classe> [as <tipo>]

    Local n1 as numeric

     

    Parameter<Param1>[as <tipo>]

     

    ConOut("Classe:MethodA")

     

    Return n1

     

    Em classes, podemos utilizar a tipagem de dados em propriedades e métodos.
    Na construção de métodos os parâmetros e seus respectivos tipos devem ser especificados após a declaração das variáveis locais.
    #compilacao
    6. Compilação

     

    No processo de compilação de código fonte, que utilize os recursos de tipagem de dados, serão avaliados conforme as definições, as variáveis, parâmetros e retorno de dados.
    Caso alguma inconsistência na definição dos tipos seja encontrada será emitida uma mensagem de warning mostrando em qual linha está à divergência na declaração dos dados.

    Por exemplo, na compilação do código fonte abaixo:

    #include  "protheus.ch"

     

    Function xTipagem()

    Local c1 as character

    Local n1 as numeric

     

    n1:="ABCDE"

    c1:=10

     

    Return

     

    Temos o seguinte resultado na compilação:

    TIPAGEM.PRW(7) warning W0015 Incompatible Types : cannot convert from 'C' to 'N'

    TIPAGEM.PRW(8) warning W0015 Incompatible Types : cannot convert from 'N' to 'C'

    #execucao

     

    7. Execução

     

    Durante a execução de uma função e/ou classe que utilize o recurso de tipagem de dados existe uma verificação do tipo da variável que é utilizada na passagem de parâmetro com o que foi definido no protótipo da função.
    Caso os tipos de dados sejam diferentes será exibido uma mensagem no console do TOTVS AppServer e o valor NIL será atribuído a variável que foi passada como parâmetro, causando um comportamento diferente do esperado ou erro de tipo de dado.
    Para exemplificar este comportamento temos o seguinte exemplo:

    User Function xTMain()

    Local c1 as character

    Local l1 as logical

     

    c1:="ABCDE"

    l1:=.T.

     

    ConOut("Chamada 1 - xTLog")

    ConOut(U_xTLog(l1))

     

    ConOut("Chamada 2 - xTLog")

    ConOut(U_xTLog(c1))//Invalid parameter

    Return

     

    User Function xTLog(l1 as logical)

     If l1=.T.

    ConOut("Logical .T.")

    Else

    ConOut("Logical .F.")

    EndIf

     

    Return l1

     

    Neste exemplo temos duas funções sendo que a primeira (xTMain) faz duas chamadas da função xTLog, sendo que a primeira chamada utiliza um parâmetro lógico, como esperado no protótipo da função e a segunda utiliza um parâmetro do tipo character, incorreto para a função.
    Após a
    excução
    execução temos os seguintes resultados:
    Chamada 1 – xTLog
    Logical .T.
    .T.
     
    Chamada 2 - xTLog
    *** Warning - Mismatched parameters type calling U_XTLOG at parameter 1 - 
    expected
    expected L -
    >C
    > C
    Logical .F.
    NIL

     

    Na chamada 1 a execução ocorre conforme o esperado pois o parâmetro utilizado é do mesmo tipo indicado no protótipo da função.
    Na chamada 2 é passado um parâmetro do tipo character, diferente do logical indicado no protótipo da função, sendo assim quando a função xTLog é executada o valor da variável l1 é NIL, diferente de true (.T.) atribuído a ela antes da chamada da função, sendo assim o resultado é diferente da primeira chamada.