4D v18

Tipos de dados

Página Inicial

 
4D v18
Tipos de dados

Tipos de dados  


 

 

Campos 4D, variáveis e expressões podem ser dos seguintes tipos de dados:

Tipos de dadosCampoVariávelExpressão
String (ver nota 1)SimSimSim
Numérico (ver nota 2)SimSimSim
DataSimSimSim
HoraSimSimSim
BooleanoSimSimSim
ImagemSimSimSim
PonteiroNãoSimSim
BLOB (ver nota 3)SimSimSim
Array (ver nota 4)NãoSimNão
Inteiro 64 bits (ver nota 5)SimNãoNão
ObjetoSimSimSim
ColeçãoNãoSimSim
VariantNãoSimNão
UndefinedNãoSimSim
NullNoNoSim

Notas

1. A String inclui campo alfanumérico, variável de comprimento fixo, e um campo de texto ou variável.
2. Número inclui campo e variável tipo Real, Inteiro, Inteiro longo.
3. BLOB é a abreviação para binary large object. Para mais informações sobre BLOBs, consulte a seção Comandos BLOB.
4. Array inclui todos os tipos de arrays. Para obter mais informações, consulte a seção Arrays.
5. O inteiro de 64 bits e os tipos float só podem ser controlados através de SQL. Não é recomendável trabalhar com eles através da linguagem 4D porque, neste caso, eles são convertidos para o tipo Real que poderia levar a alguma perda de precisão.

String  

Cadeia é um termo genérico que representa:

  • As variáveis ou campos de tipo alfanumérico: Um campo alfanumérico pode conter de 0 a 255 caracteres (o limite se fixa durante a definição do campo).
  • As variáveis ou campos tipo Texto: um campo, uma variável ou uma expressão de tipo texto pode conter de 0 a 2 GB de texto.
  • Toda expressão de tipo Alfa ou Texto

Não há diferença entre uma variável alfanumérica e uma variável texto.
Pode atribuir uma variável alfa a um texto e vice-versa; 4D realiza a conversão, truncando os valores se é necessário. Pode misturar cadeia e texto nas expressões.

Nota: No manual Referência da Linguagem 4D, ambos parâmetros string e texto em descrições de comando são indicados como String, exceto quando indicado contrário.

Número é um termo genérico que representa:

  • Campo Real, variável ou expressão
  • Campo Inteiro, variável ou expressão
  • Campo Inteiro longo, variável ou expressão

O intervalo indicado para o tipo de dados Real é ±1.7e±308 (13 cifras significativas)
O intervalo para o tipo de dados número Inteiro (Inteiro de 2 bytes) é -32,768..32,767 (2^15..(2^15)-1)
O intervalo para o tipo de dados Inteiro longo (Inteiro de 4 bytes) é de -2^31..(2^31)-1

Você pode atribuir qualquer tipo de dados Número para o outro; 4D faz a conversão, truncamento ou o arredondamento, se for necessário. No entanto, quando os valores estão fora do intervalo, a conversão não irá retornar um valor válido. Você pode misturar tipos de dados Número em expressões.

Nota: No manual da Linguagem 4D, não importa o tipo de dados, os parâmetros de tipo Real, Inteiro e Inteiro Longo nas descrições de comando são chamados numéricos, exceto quando indicado contrário.

Data  

  • Um campo de data, variável ou expressão pode ser estar no intervalo de 1/1/100 a 12/31/32,767.
  • Usando os a versão em Português de 4D, a data é ordenada no formato dia/mês/ano.
  • Se um ano é dado como dois dígitos, presume-se estar na década de 1900 se o valor for maior ou igual a 30, e de 2000, se o valor for inferior a 30 (esse padrão pode ser alterado usando o comando SET DEFAULT CENTURY).
  • Apesar do  modo de representação de datas C_DATE permite trabalhar com datas até o ano 32.767, certas operações que passam pelo sistema impõe um limite inferior.

Nota: No manual Referência de Linguagem 4D, os parâmetros de data nas descrições do comando são indicadas como data, salvo quando indicado o contrário.

As datas em JavaScript são objetos, são enviadas a 4D como texto que contém sua forma JSON como qualquer outro objeto. Este princípio se aplica, em particular, quando se utilizam as funcionalidades 4D Mobile ou Área Web.
A forma JSON do objeto Date JavaScript segue a norma ISO 8601, por exemplo, 2013-08-23T00:00:00Z".

É sua responsabilidade converter este texto em uma data 4D (C_DATE ). Estão disponíveis duas soluções:

  • Utilizar o comando JSON Parse:
     C_TEXT($1// Recepção de uma data em formato ISO
     C_DATE($d)
     $d:=JSON Parse("\""+$1+"\"";Is date))
  • Utilizar o comando Date:
     C_TEXT($1// recepção de uma data em formato ISO
     C_DATE($d)
     $d:=Date($1)


Observe a diferença entre estas duas soluções: JSON Parse respeita o modo de conversão definido pelo comando #cmd id="642"/] (se o houver), enquanto Date não está sujeito a este. A conversão com o comando Date sempre tem em conta a zona horária local.

Nota: A partir de 4D v16 R6, se a configuração de armazenamento de data atual for "date type", Strings de data JSON em formato "AAAA-MM-DD" são automaticamente manejados como valores de data pelos comandos JSON Parse e Date . Para saber mais sobre essa configuração veja a opção  "Use date type instead of ISO date format in objects" em Página Compatibilidade.

Tempo  

  • Um campo de Tempo, variável ou expressão pode estar no intervalo de 0:00:00 a 596,000:00:00.
  • Na versão em Inglês de 4D, o tempo é ordenado em hora:minuto:segundo.
  • As horas estão no formato de 24 horas.
  • Um valor de tempo pode ser tratado como um número. O número retornado de um tempo é o número de segundos que o tempo representa. Para mais informações, consulte a seção de Operadores de Hora.

Nota: No Manual de Referência 4D da linguagem, parâmetros de tempo em descrições de comando são indicados como Tempo, exceto quando indicado o contrário.

Um campo booleano, variável ou expressão pode ser VERDADEIRO ou FALSO.

Nota: No Manual Referência de Linguagem 4D, os parâmetros booleanos em descrições de comando são indicadas como Booleano, exceto quando indicado o contrário.

Imagem  

Um campo de imagem, variável ou expressão pode ser qualquer imagem do Windows ou Macintosh. Em geral, isso inclui qualquer imagem que possa ser colocada na área de tranferência ou lida do disco usando 4D ou comandos de Plug-In.

Nota: No manual Referência de Linguagem 4D, os parâmetros de imagem nas descrições do comando são indicadas como Imagem, salvo quando indicado o contrário.

Uma variável ponteiro ou expressão é uma referência a outra variável (incluindo arrays e elementos de array), tabela ou campo. Não há nenhum campo de tipo ponteiro.

Para mais informações sobre ponteiros, consulte a seção Ponteiros.

Nota: No manual Referência de Linguagem 4D, os parâmetros de Ponteiro nas descrições do comando são indicados como Ponteiro, salvo quando indicado o contrário.
BLOB.

BLOB  

Um campo, variável ou expressão BLOB é uma série de bytes (0-2 GB de comprimento) que você pode endereçar individualmente ou usando  [#title id="2790"/]. 

Nota: No manual Referência de Linguagem 4D, os parâmetros de BLOB nas descrições do comando são indicados como BLOB

Objeto  

Variáveis, campos ou expressões do tipo Objeto podem conter vários tipos de dados. A estrutura dos objetos 4D "nativo" é baseada no princípio clássico de pares "propriedade/valores". A sintaxe desses objetos é baseada em notação JSON, mas não a segue completamente.

  • Um nome de propriedade é sempre um texto, por exemplo "Nome".
  • Um valor de propriedade pode ser do seguinte tipo:
    • Número (Real, Inteiro, etc)
    • Texto
    • Array (texto, real, booleano, objeto, ponteiro)
    • Nulo
    • Booleano
    • Ponteiro (armazenado como tal, avaliado utilizando o comando JSON Stringify ou ao copiar),
    • Data (formato "\"AAAA-MM-DDTHH:mm:ssZ\"")
    • Objeto (os objetos podem estar aninhados em vários níveis)
    • imagem(*)
    • collection

Aviso: Lembre que os nomes de atributo diferenciam entre maiúsculas e minúsculas.

Você pode gerenciar as variáveis, campos ou expressões usando os comandos disponíveis no tema Objetos (Linguagem). Note que comandos específicos do tema Pesquisas tais como QUERY BY ATTRIBUTE, [#cmd id="1407"/] e QUERY SELECTION BY ATTRIBUTE  podem ser usados para realizar processamento de campos objeto

Já que campos Objeto são tipicamente baseados em texto, os conteúdos de um campo objeto são exibidos em um formato 4D como padrão como sendo texto e formatos em JSON.

(*)Quando exposto como texto no debugger ou exportado para JSON, as propriedades de impressão são de objeto imagem "[object Picture]". Lembre que salvar o registro depois disso vai salvar a string  "[object Picture]" no atributo.

Nota: Para trabalhar com objetos JSON, pode usar os comandos no tema "JSON" .

Uma variável Coleção pode conter uma lista ordenada de valores de vários tipos, por exemplo:

 C_COLLECTION($col)
 $col:=New collection("Ford";"Renault";"Nissan";500;100;True)
  //$col=["Ford","Renault","Nissan",500,100,true]

Os tipos de valores suportados são texto, número, objeto, array, booleano, coleção ou nulo. Não há nenhuma expressão ou campo de tipo Coleção.

Para administrar as variáveis de tipo Coleção, necessita utilizar a notação de objeto (ver Usar notação padrão objeto) e os comandos de tema Coleções.

  • Se acessar aos elementos da coleção através de seu número de elemento (índice),
  • Para designar um elemento, use a  sintaxe: myCollection[N], onde N é o índice de elemento de coleção
  • Atenção: o índice de elemento de coleção começa em 0

Exemplo:

 C_COLLECTION($col)
 $col:=New collection("Ford";"Renault";"Nissan")
 $col[1]:="BMW"
  //$col=["Ford","BMW","Nissan"]

As variáveis Coleção armazenam arrays JSON. Um array JSON é uma coleção de valores separados por vírgulas de qualquer tipo, por exemplo:

 C_COLLECTION($c1;$c2)
 C_TEXT($json1;$json2)
 $c1:=JSON Parse("[\"Ford\",\"Renault\",\"Nissan\",500,100,true]")
 $json1:=JSON Stringify($c1)
  //$json1=["Ford","Renault","Nissan",500,100,true]
 $c2:=JSON Parse("[1,2,3,\"a\",\"b\",\"c\"]")
 $json2:=JSON Stringify($c2)
  //$json2=[1,2,3,"a","b","c"]

Variant  

Variant é um tipo de dado "meta" que permite encapsular dados de qualquer tipo válido em uma variável. Tipicamente, estes tipos de dados podem ser usados para escrever código genérico ou receber valores para os quais o tipo não é conhecido. Esse é o caso, por exemplo, para manejar atributos de objeto de código.  

Uma variável tipo variant pode conter um valor dos tipos de dados abaixo:

  • BLOB
  • booleano
  • coleção
  • data
  • inteiro longo
  • objeto
  • imagem
  • ponteiro
  • real
  • texto
  • hora
  • null
  • indefinido

Note: Arrays não podem ser armazenados em variáveis variant. 

Em modos interpretado e compilados, a mesma variável variant pode ter seus conteúdos atribuídos de tipos diferentes. Diferente de tipos de dados fixos, os conteúdos de variável tipo variant é diferente do tipo variável variant. Por exemplo:

 C_VARIANT($variant)
 
 $variant:="hello world"
 $vtype:=Type($variant// 12 (Is variant)
 $vtypeVal:=Value type($variant// 2 (Is text)
 
 $variant:=42
 $vtype:=Type($variant// 12 (Is variant)
 $vtypeVal:=Value type($variant// 1 (Is real)

Pode usar variáveis variant onde variáveis forem esperadas, apenas precisa ter certeza que o tipo de dados dos conteúdos da variável seja do tipo esperado. Quando acessar variáveis variant, só seus valores atuais são considerados. por exemplo:

 C_VARIANT($v)
 $v:="hello world"
 $v2:=$v  //atribuir variável para outra variável
 
 $t:=Type($v// 12 (Is variant)
 $t2:=Type($v2// 2 (Is text)
 

Variant pode ser usado para declarar parâmetros método ($0, $1,...) que podem ser de vários tipos. Neste caso, pode construir seu código testando o tipo de valor do parâmetro, por exemplo:

 C_VARIANT($1)
 Case of
    :(Value type($1)=Is longint)
       ...
    :(Value type($1)=Is text)
       ...
 End case

Nota: Por razões de eficiência, quando variáveis variant não sejam necessárias (ou seja, o tipo de dados é conhecido), é recomendado usar variáveis de tipo fixo ao invés de variáveis variant.

Indefinido não é realmente um tipo de dados. Ela denota uma variável que ainda não foi definida. A função (um método de projeto que retorna um resultado) pode retornar um valor indefinido, se, dentro do método, o resultado da função ($ 0) é atribuído a uma expressão indefinida (uma expressão calculada com pelo menos uma variável indefinida). Um campo não pode ser indefinido (o comando Undefined sempre retorna False para um campo). Uma variável variant tem como valor normal undefined.

 

Null  

Null é um tipo especial de dados com um único valor possível: null. Este valor é retornado por uma expressão que não contém nenhum valor.

Do ponto de vista do banco de dados 4D, um valor null expressa o fato que o valor do dado é desconhecido. Isso NAO significa que o valor está em branco ou vazio ("" para uma string, ou 0 para um longint são exemplos de valores em branco). No banco de dados 4D, valores null em campos (exceto para atributos de campo  Object) são gerenciados somente pelo motor  SQL . Uma opção específica de campo permite que configure como o banco de dados deve manejar este valor (Mapear valores NULOS a valores vazios) e você pode estabelecer ou ler os valores null usando os comandos  Is field value Null e SET FIELD VALUE NULL.

Na linguagem 4D e para atributos campo objeto, valores null são gerenciados através da função Null. Esta função pode ser u sada com as expressões abaixo para estabelecer ou comparar o valor null:

  • atributos objeto
  • elementos coleção
  • variáveis de tipo objeto, coleção, ponteiro ou imagem ou variante

Array  

Array não é na verdade um tipo de dados. Os vários tipos de arrays (como Array de Inteiros, Array de texto, e assim por diante) são agrupados sob este título. Arrays são variáveis, não existe um campo de tipo Array, e não existe uma expressão de tipo Array. Para obter mais informações sobre arrays, consulte a seção Arrays.

Nota: No manual Referência de Linguagem 4D, os parâmetros de Array nas descrições do comando são indicadas como Array, salvo quando indicado o contrário. (por exemplo., Array Texto, Array Numèrico, etc.).

A linguagem 4D contém operadores e comandos para converter tipos de dados, onde tais conversões são significativas. A linguagem 4D reforça a verificação de tipo de dados. Por exemplo, você não pode escrever: "abc"+0.5+!12/25/96!-?00:30:45?. Isso irá gerar erros de sintaxe.

A tabela a seguir lista os tipos de dados básicos, os tipos de dados que podem ser convertidos, e os comandos usados para fazer isso:

Tipos a converterConverter em stringConverter em númeroConverter em dataConverter em Hora
String (*)NumDateTime
Numérico (**)String
DataString
HoraString
BooleanoNum
ObjetoJSON Stringify
CollectionJSON Stringify

(*) As strings formatadas em JSON podem ser convertidas em dados escalares ou em objetos utilizando o comando JSON Parse.
(**) Os valores de hora podem ser tratados como números.

Nota: Além das conversões de dados constantes da tabela, conversões de dados mais sofisticadas podem ser obtidas através da combinação de operadores e outros comandos.



Ver também 

Apresentação de comandos JSON
Arrays
Guia Digitação
Métodos
Ponteiros
Type
Usar Diretivas de Compilador
Variáveis

 
PROPRIEDADES 

Produto: 4D
Tema: Apresentação da linguagem

 
CONTEÚDO DA PÁGINA 
 
HISTÓRIA 

New
Modificado: 4D v16 R4
Modificado: 4D v16 R6
Modificado: 4D v18

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v18)