Saltar para o conteúdo principal
Versão: 18

Tipos de dados

Em 4D, os dados se manejam segundo seu tipo em dois lugares: os campos do banco de dados e a linguagem 4D.

Apesar de geralmente serem equivalentes, alguns tipos de dados disponíveis no nível do banco de dados não estão diretamente disponíveis na linguagem e são convertidos automaticamente. Por outro lado, alguns tipos de dados pode somente ser manejados através da linguagem. A tabela lista todos os tipos de dados disponíveis e sua compatibilidade/declarações:

Tipos de dadosSuporte para o banco (1)Suporte LinguagemDeclaração de variáveis
AlfanuméricoSimConvertido em texto-
TextSimSimC_TEXT, ARRAY TEXTO
DateSimSimC_DATE, ARRAY DATE
HoraSimSimC_TIME, ARRAY TIME
ParâmetrosSimSimC_BOOLEAN, ARRAY BOOLEAN
IntegerSimConvertido para longIntARRAY INTEGER
LongintSimSimC_LONGINT, ARRAY LONGINT
Inteiro longo 64 bitsSim (SQL)Convertido para real-
RealSimSimC_REAL, ARRAY REAL
Indefinido-Sim-
Null-Sim-
Ponteiro-SimC_POINTER, ARRAY POINTER
ImagemSimSimC_PICTURE, ARRAY PICTURE
BLOBSimSimC_BLOB, ARRAY BLOB
ObjectSimSimC_OBJECT, ARRAY OBJECT
Collection-SimC_COLLECTION
Variant(2)-SimC_VARIANT

(1) Note que ORDA maneja campos de bancos de dados através de objetos (entidades) e assim, só é compatível com tipos de dados disponíveis a esses objetos. Para saber mais, veja a descrição de tipo de dados Object.

(2) Variante não é um tipo data mas um tipo variável que contém um valor de qualquer outro tipo de dados.

Valor padrão​

Quando as variáveis são digitadas por uma diretiva de compilador, elas recebem um valor padrão, que eles manterão durante a sessão, desde que não tenham sido atribuídos.

O valor padrão depende da variável e categoria, seu contexto de execução (interpretado ou compilado), bem como, para o modo compilado, as opções de compilação definidas na página Compilador das configurações do banco de dados:

  • As variáveis processo e interprocessos são sempre definidos "para zero" (que significa, dependendo do caso, "0", uma linha vazia, um Blob, um ponteiro Nil, uma data em branco (00-00-00), etc.)
  • As variáveis locais são definidas:
    • em modo interpretado: a zero
    • no modo compilado, dependendo da opção Inicializar variáveis locais das configurações do banco de dados:
      • "a zero": a zero (ver acima),
      • "para um valor aleatório": 0x72677267 para números e vezes, sempre True para Booleanos, o mesmo que "para zero" para os outros,
      • "no": nenhuma inicialização, significando o que quer que esteja na RAM é usado para as variáveis, como valores usados antes para outras variáveis. Nota: 4D recomenda a utilização de "em zero".

A tabela seguinte ilustra estes valores por defeito:

TipoInterprocesso/Processo (interpretado/compilado), Local (interpretado/compilado "para zero")Local compilado "aleatório"Local compilado "não"
BooleanoFalseTrueTrue (varia)
Date00-00-0000-00-0000-00-00
Integer01919382119909540880 (varia)
Hora00:00:00533161:41:59249345:34:24 (varia)
Imagemtamanho da imagem=0tamanho da imagem=0tamanho da imagem=0
Real01.250753659382e+2431,972748538022e-217 (varia)
PonteiroNil=trueNil=trueNil=true
Text""""""
BlobTamanho do Blob =0Tamanho do Blob =0Tamanho do Blob =0
Objectnullnullnull
Collectionnullnullnull
Diferente deindefinidoindefinidoindefinido

Conversão de tipos de dados​

A linguagem 4D contém operadores e comandos para converter entre tipos de dados, onde tais conversões são significativas. A língua 4D obriga à verificação do tipo de dados. Por exemplo, não se pode escrever: "abc"+0.5+!12/25/96!-?00:30:45?. Isto irá gerar erros de sintaxe.

O quadro seguinte lista os tipos de dados básicos, os tipos de dados para os quais podem ser convertidos, e os comandos utilizados para o fazer:

Tipo de dados a converterpara Stringpara Númeropara Datapara Tempopara Booleano
String (1)NumDateHoraBool
Número (2)TextBool
DateTextBool
HoraTextBool
ParâmetrosNum

(1) Strings formatadas em JSON podem ser convertidas em dados escalares, objetos ou coleções, usando o comando JSON Parse

(2) Os valores de tempo podem ser tratados como números.

Nota: Além das conversões de dados listadas nesta tabela. Conversões de dados mais sofisticadas podem ser obtidas combinando operadores e outros comandos.