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.