Saltar al contenido principal
Versión: v18

Tipos de datos

En 4D, los datos se manejan según su tipo en dos lugares: los campos de la base y el lenguaje 4D.

Aunque suelen ser equivalentes, algunos tipos de datos disponibles en la base no están disponibles directamente en el lenguaje y se convierten automáticamente. Por el contrario, algunos tipos de datos sólo pueden manejarse a través del lenguaje. La siguiente tabla lista todos los tipos de datos disponibles y cómo se soportan/declaran:

Tipos de datosSoporte para la base (1)Soporte para el lenguajeDeclaración de variables
AlfanuméricoConvertido en texto-
TextC_TEXT, ARRAY TEXT
FechaC_DATE, ARRAY DATE
HoraC_TIME, ARRAY TIME
BooleanC_BOOLEAN, ARRAY BOOLEAN
IntegerConvertido en entero largoARRAY INTEGER
LongintC_LONGINT, ARRAY LONGINT
Entero largo 64 bitsSí (SQL)Convertido en real-
RealC_REAL, ARRAY REAL
Indefinido--
Null--
Puntero-C_POINTER, ARRAY POINTER
PictureC_PICTURE, ARRAY PICTURE
BLOBC_BLOB, ARRAY BLOB
ObjectC_OBJECT, ARRAY OBJECT
Collection-C_COLLECTION
Variant(2)-C_VARIANT

(1) Tenga en cuenta que ORDA maneja los campos de la base a través de objetos (entidades) y por lo tanto, sólo soporta los tipos de datos disponibles para estos objetos. Para más información, consulte la descripción del tipo de datos Objeto.

(2) La variante no es en realidad un tipo de datos sino un tipo de variable que puede contener un valor de cualquier otro tipo de datos.

Valores por defecto

Cuando las variables se introducen mediante una directiva del compilador, reciben un valor por defecto, que mantendrán durante la sesión mientras no hayan sido asignadas.

El valor por defecto depende del tipo y la categoría de la variable, su contexto de ejecución (interpretada o compilada), así como, para el modo compilado, las opciones de compilación definidas en la página Compilador de las Propiedades de la base:

  • Las variables proceso e interproceso se ponen siempre "en cero" (lo que significa, según el caso, "0", una cadena vacía, un Blob vacío, un puntero Nil, una fecha en blanco (00-00-00), etc.)
  • Se establecen las variables locales:
    • en modo interpretado: en cero
    • en modo compilado, dependiendo de la opción Inicializar variables locales de las Propiedades de la base:
      • "en cero": en cero (ver arriba),
      • "a un valor aleatorio": 0x72677267 para números y horas, siempre True para booleanos, igual que "en cero" para los demás,
      • "no": no hay inicialización, lo que significa que lo que está en la RAM se utiliza para las variables, como los valores utilizados antes para otras variables. Nota: 4D recomienda utilizar "en cero".

La siguiente tabla ilustra estos valores por defecto:

TipoInterproceso/Proceso (interpretado/compilado), Local (interpretado/compilado "en cero")Local compilado "aleatorio"Local compilado "no"
BooleanoFalseTrueTrue (varía)
Fecha00-00-0000-00-0000-00-00
Longint01919382119909540880 (varía)
Hora00:00:00533161:41:59249345:34:24 (varía)
Picturepicture size=0picture size=0picture size=0
Real01.250753659382e+2431.972748538022e-217 (varía)
PunteroNil=trueNil=trueNil=true
Text""""""
BlobTamaño Blob=0Tamaño Blob=0Tamaño Blob=0
Objectnullnullnull
Collectionnullnullnull
Variantindefinidoindefinidoindefinido

Convertir los tipos de datos

El lenguaje 4D contiene operadores y comandos para convertir entre tipos de datos, cuando dichas conversiones tienen sentido. El lenguaje 4D aplica la verificación de tipos de datos. Por ejemplo, no se puede escribir: "abc"+0.5+!12/25/96!-?00:30:45?. Esto generará errores de sintaxis.

La siguiente tabla lista los tipos de datos básicos, los tipos de datos a los que se pueden convertir y los comandos utilizados para hacerlo:

Tipos a convertiren Cadenaen Númeroen Fechaen Horaen Booleano
String (1)NumFechaHoraBool
Número (2)StringBool
FechaStringBool
HoraStringBool
BooleanNum

(1) Las cadenas formateadas en JSON pueden convertirse en datos escalares, objetos o colecciones, utilizando el comando JSON Parse.

(2) Los valores de tipo Hora pueden tratarse como números.

Nota: además de las conversiones de datos listadas en esta tabla, se pueden obtener conversiones de datos más sofisticadas combinando operadores y otros comandos.