Tempo de leitura: 9 minutos
Olá, me chamo Adilio Costa, nesse post iremos conhecer os tipos de dados ADVPL, vendo suas diferenças e exemplos práticos de como utilizá-los.
A linguagem ADVPL não é uma linguagem rígida quanto a questão de definição de tipos de dados como é por exemplo a linguagem java, isso significa dizer que quando criamos uma variável em ADVPL não precisamos definir o tipo de dado que ela irá armazenar, essa mesma variável poderá receber qualquer tipo de dado em tempo de execução.
A seguir iremos conhecer os tipos de dados primários do ADVPL:
- Númerico
- Lógico
- Caracter
- Data
- Array
- Bloco de Códigos
Tipo de Dado Numérico
O ADVPL por padrão não diferencia variáveis com valores numéricos(inteiros) de valores com ponto flutuante(reais), assim essas variáveis poderão receber qualquer valor que esteja no intervalo permitido.
Observação:Uma variável do tipo de dado numérico pode conter um número de 18(dezoito) dígitos incluindo o ponto flutuante, no intervalo de 2.2250738585072014 E-308 até 1.7976931348623158 E+308.
Exemplos de variáveis de tipo de dado numérico em ADVPL:
#include 'protheus.ch'
/*
Blog/Site ProtheusAdvpl - www.protheusadvpl.com.br
--------------------------------------------------------------------------------
Canal ProtheusAdvpl - www.youtube.com/protheusadvpl
--------------------------------------------------------------------------------
Portal ProtheusAdvpl - http://protheusadvpl.com.br/sobre-o-portal-protheus-advpl
*/
/*/{Protheus.doc} Numerico
//TODO Descrição auto-gerada.
@author Adilio Costa
@since 10/08/2019
@version 1.0
@return ${return}, ${return_description}
@type function
/*/
User Function Numerico()
//Definição de variáveis numéricas
Local nNum := 10
Local nNum2 := 21.45
Local nNum3 := 0.000043
Local nNum4 := 1900000000
Local cMsg := "Variáveis Numéricas ADVPL:"+CHR(13)+"nNum:"+cValToChar(nNum)
cMsg += CHR(13)+"nNum2:"+cValToChar(nNum2)+CHR(13)+"nNum3:"+cValToChar(nNum3)
cMsg += CHR(13)+"nNum4:"+cValToChar(nNum4)
msgAlert(cMsg)
Return

Tipo de Dado Lógico
Tipos de dados lógicos em ADVPL são representado pelos valor .T. ou .Y. para indicar que o conteúdo da variável é TRUE(verdadeiro) ou .F. ou .N. para indicar que é FALSE(falso).
Exemplos de variáveis de tipo de dado lógico em ADVPL:
Tipos de dados lógicos em ADVPL são representado pelos valor .T. ou .Y. para indicar que o conteúdo da variável é TRUE(verdadeiro) ou .F. ou .N. para indicar que é FALSE(falso).
Exemplos de variáveis de tipo de dado lógico em ADVPL:
#include 'protheus.ch'
/*
Blog/Site ProtheusAdvpl - www.protheusadvpl.com.br
--------------------------------------------------------------------------------
Canal ProtheusAdvpl - www.youtube.com/protheusadvpl
--------------------------------------------------------------------------------
Portal ProtheusAdvpl - http://protheusadvpl.com.br/sobre-o-portal-protheus-advpl
*/
/*/{Protheus.doc} Logico
//TODO Descrição auto-gerada.
@author Adilio Costa
@since 10/08/2019
@version 1.0
@return ${return}, ${return_description}
@type function
/*/
User Function Logico()
//Definição de variáveis lógicas
Local lVar := .T.
Local lVar2 := .F.
Local cMsg := "Variáveis Lógicas ADVPL:"+CHR(13)+"lVar:"+cValToChar(lVar)
cMsg += CHR(13)+"lVar2:"+cValToChar(lVar2)
msgAlert(cMsg)
Return

Tipo de Dado Caracter
O tipo de dado caracter é definido em ADVPL com valores que contenham aspas duplas(” “) ou aspas simples(‘ ‘).
Exemplos de variáveis de tipo de dado caracter em ADVPL:
#include 'protheus.ch'
/*
Blog/Site ProtheusAdvpl - www.protheusadvpl.com.br
--------------------------------------------------------------------------------
Canal ProtheusAdvpl - www.youtube.com/protheusadvpl
--------------------------------------------------------------------------------
Portal ProtheusAdvpl - http://protheusadvpl.com.br/sobre-o-portal-protheus-advpl
*/
/*/{Protheus.doc} Caracter
//TODO Descrição auto-gerada.
@author Adilio Costa
@since 10/08/2019
@version 1.0
@return ${return}, ${return_description}
@type function
/*/
User Function Caracter()
//Definição de variáveis caracteres
Local cVar := 'Protheus'
Local cVar2 := "ADVPL"
Local cMsg := "Variáveis Caracteres ADVPL:"+CHR(13)+"lVar:"+cVar
cMsg += CHR(13)+"lVar2:"+cVar2
msgAlert(cMsg)
Return

ADVPL não possui caractere de “escape”(caractere especiais que representam aspas), assim caso queiramos declarar um tipo caractere que contenha ao mesmo tempo aspas duplas(“”) ou aspas simples devemos concatená-las conforme o exemplo abaixo:
#include 'protheus.ch'
/*
Blog/Site ProtheusAdvpl - www.protheusadvpl.com.br
--------------------------------------------------------------------------------
Canal ProtheusAdvpl - www.youtube.com/protheusadvpl
--------------------------------------------------------------------------------
Portal ProtheusAdvpl - http://protheusadvpl.com.br/sobre-o-portal-protheus-advpl
*/
/*/{Protheus.doc} Caracter
//TODO Descrição auto-gerada.
@author Adilio Costa
@since 10/08/2019
@version 1.0
@return ${return}, ${return_description}
@type function
/*/
User Function Caracter()
//Definição de variáveis caracteres
Local cVar := 'Protheus'
Local cVar2 := "ADVPL"
Local cMsg := "Variáveis Caracteres ADVPL:"+CHR(13)+"lVar:'"+cVar+"'"
cMsg += CHR(13)+"lVar2:'"+cVar2+"'"
msgAlert(cMsg)
Return

Tipo de Dado Data
A linguagem ADVPL possui o tipo de dado data, diferentemente dos outros tipos de dados, o tipo data não pode ser declarado diretamente e sim através de funções específicas pra isso que a linguagem disponibiliza, como a função CTOD(cCaractere) que converte variáveis do tipo caracter(no formato “DD/MM/AA”) para data:
Exemplo:
CTOD(“10/08/19”) -> 10/08/19
Exemplos de variáveis de tipo de dado data em ADVPL:
#include 'protheus.ch'
/*
Blog/Site ProtheusAdvpl - www.protheusadvpl.com.br
--------------------------------------------------------------------------------
Canal ProtheusAdvpl - www.youtube.com/protheusadvpl
--------------------------------------------------------------------------------
Portal ProtheusAdvpl - http://protheusadvpl.com.br/sobre-o-portal-protheus-advpl
*/
/*/{Protheus.doc} FData
//TODO Descrição auto-gerada.
@author Adilio Costa
@since 10/08/2019
@version 1.0
@return ${return}, ${return_description}
@type function
/*/
User Function FData()
//Definição de variáveis datas
Local dVar := CTOD("10/08/19")
Local dVar2 := dVar+1
Local cMsg := "Variáveis Datas ADVPL:"+CHR(13)+"dVar:"+DTOC(dVar)
cMsg += CHR(13)+"dVar2:"+DTOC(dVar2)
msgAlert(cMsg)
Return

Tipo de Dado Array(matriz)
A linguagem ADVPL possui o tipo de dado Array(matriz), que é um tipo de dado especial em que os elementos desse array ficam dispostos em linhas e colunas, e são acessados através de seus índices numéricos iniciado por 1.
No ADVPL podemos ter array unidimensionais, arrays que são representados por uma dimensão conforme apresentado no exemplo abaixo:
Nomes[“Rodrigo”,”Carla”,”Adilio”]
Nesse caso é como se cada elemento do array Nomes ficassem dispostos conforme o exemplo:
Índice Valor
1 [“Rodrigo”]
2 [“Carla”]
3 [“Adilio”]
O array multidimensional em ADVPL é representado por 2 ou mais dimensões conforme o exemplo abaixo:
Nomes[[“Adilio”,”Masculino”,31],[“Danilo”,”Masculino”,32],[“Carla”,”Feminino”,26]]
Linha Coluna Valor
1 1 “Adilio”
1 2 “Masculino”
1 3 31
2 1 “Danilo”
2 2 “Masculino”
2 3 32
3 1 “Carla”
3 2 “Feminino”
3 3 26
Linha Coluna 1 2 3
1 [“Adilio”,”Masculino”,31]
2 [“Danilo”,”Masculino”,32]
3 [“Carla”,”Feminino”,26]
Exemplos de variáveis de tipo de dado Array em ADVPL:
#include 'protheus.ch'
/*
Blog/Site ProtheusAdvpl - www.protheusadvpl.com.br
--------------------------------------------------------------------------------
Canal ProtheusAdvpl - www.youtube.com/protheusadvpl
--------------------------------------------------------------------------------
Portal ProtheusAdvpl - http://protheusadvpl.com.br/sobre-o-portal-protheus-advpl
*/
/*/{Protheus.doc} FArray
//TODO Descrição auto-gerada.
@author Adilio Costa
@since 10/08/2019
@version 1.0
@return ${return}, ${return_description}
@type function
/*/
User Function FArray()
//Definição de variáveis array
Local aNomes := {"Rodrigo","Carla","Adilio"}
Local cMsg := ""
for i := 1 TO len(aNomes)
cMsg +="Nome "+cValToChar(i)+":"+aNomes[i]+CHR(13)
Next i
msgAlert(cMsg)
Return

Tipo de Dado Bloco de Código
Bloco de código é um tipo de dado especial em ADVPL que armazena instruções ADVPL para serem executadas posteriormente.
Exemplos de variáveis de tipo de dado Bloco de Código em ADVPL:
#include 'protheus.ch'
/* Blog/Site ProtheusAdvpl - www.protheusadvpl.com.br
--------------------------------------------------------------------------------
Canal ProtheusAdvpl - www.youtube.com/protheusadvpl
--------------------------------------------------------------------------------
Portal ProtheusAdvpl - http://protheusadvpl.com.br/sobre-o-portal-protheus-advpl */
/*/{Protheus.doc} BCodigo
//TODO Descrição auto-gerada.
@author Adilio Costa
@since 10/08/2019
@version 1.0
@return ${return}, ${return_description}
@type function /*/
User Function BCodigo()
//Definição de variáveis Bloco de Código
Local bSoma5 := {|x| x+5}
Local nNum := 10
msgAlert(cValToChar(eval(bSoma5,nNum)))
Return

No exemplo do tipo de dado Bloco de Código em ADVPL acima o bloco de código bSoma5 recebe uma lista de expressões({|x| x+5}), é como se bSoma5 referenciasse uma função, essa função recebe como parâmetro a variável x e depois somamos o valor x a 5 e através da função eval executamos o bloco de código, o valor retornado é 15, pois passamos o valor 10(nNum:=10) e o mesmo foi somado com 5.
Bem, assim terminamos o post sobre tipos de dados em ADVPL, espero que você tenha entendido. Até um próximo post, grande abraço e fica com Deus.