Aller au contenu principal
Version: 18

Types de données

Dans 4D, les données sont gérées selon leur type à deux endroits : dans les champs de la base et dans le langage 4D.

Bien qu'ils soient généralement équivalents, certains types de données de la base ne sont pas disponibles dans le langage et sont automatiquement convertis. A l'inverse, certains types de données sont gérés uniquement par le langage. Le tableau suivant liste tous les types de données disponibles, leur prise en charge et leur déclaration :

Types de donnéesPris en charge par la base(1)Pris en charge par le langageDéclaration de la variable
AlphanumériqueOuiConverti en texte-
TextOuiOuiC_TEXT, ARRAY TEXT
DateOuiOuiC_DATE, ARRAY DATE
TimeOuiOuiC_TIME, ARRAY TIME
BooleanOuiOuiC_BOOLEAN, ARRAY BOOLEAN
IntegerOuiConverti en entier longARRAY INTEGER
LongintOuiOuiC_LONGINT, ARRAY LONGINT
Longint 64 bitsOui (SQL)Converti en réel-
RealOuiOuiC_REAL, ARRAY REAL
Undefined-Oui-
Null-Oui-
Pointer-OuiC_POINTER, ARRAY POINTER
PictureOuiOuiC_PICTURE, ARRAY PICTURE
BLOBOuiOuiC_BLOB, ARRAY BLOB
ObjectOuiOuiC_OBJECT, ARRAY OBJECT
Collection-OuiC_COLLECTION
Variant(2)-OuiC_VARIANT

(1) A noter que ORDA gère les champs de la base via des objets (entités). Par conséquent, seuls les types de données disponibles pour ces objets sont pris en charge. Pour plus d'informations, veuillez vous reporter à la description du type Objet.

(2) Le variant n'est pas un type de données un type de variable qui peut contenir une valeur de n'importe quel autre type.

Valeurs par défaut

Au moment de leur typage via une directive de compilation, les variables reçoivent une valeur par défaut, qu'elles conserveront au cours de la session tant qu'elles n'auront pas été affectées.

La valeur par défaut dépend du type et de la catégorie de la variable, du contexte d'exécution (interprété ou compilé), ainsi que, pour le mode compilé, des options de compilation définies dans la Page Compilateur des Propriétés de la base :

  • Les variables process et interprocess sont toujours positionnées "à zéro" (qui signifie selon les cas 0, chaîne vide, blob vide, pointeur nil, date 00-00-00…)
  • Les variables locales sont positionnées :
    • en mode interprété : à zéro
    • en mode compilé, dépendant de l'option Initialiser les variables locales des Propriétés de la base :
      • à zéro lorsque "à zéro" est sélectionné,
      • à une valeur arbitraire fixe lorsque "à une valeur aberrante" est sélectionné (0x72677267 pour les numériques et les heures, toujours vrai pour les booléens), équivalent de "à zéro" pour les autres,
      • à "non" : pas d'initialisation, c'est-à-dire que tout ce qui est dans la RAM est utilisé pour les variables; c'est le cas des valeurs déjà utilisées pour les autres variables. Note : Il est recommandé d'utiliser "à zéro".

Le tableau suivant illustre ces valeurs par défaut :

TypeInterprocess/Process (interprété/compilé), Local (interprété/compilé "à zéro")Local compilé "aberrant"Local compilé "non"
BooleenFalseTrueTrue (varie)
Date00-00-0000-00-0000-00-00
Longint01919382119909540880 (varie)
Time00:00:00533161:41:59249345:34:24 (varie)
Picturepicture size=0picture size=0picture size=0
Real01.250753659382e+2431.972748538022e-217 (varie)
PointerNil=trueNil=trueNil=true
Text""""""
BlobBlob size=0Blob size=0Blob size=0
ObjectNullNullNull
CollectionNullNullNull
Variantundefinedundefinedundefined

Convertir les types de données

Le langage de 4D comporte des fonctions et des opérateurs vous permettant de convertir des types de données en d’autres types, dans la mesure où de telles conversions ont un sens. 4D assure la vérification des types de données. Ainsi, vous ne pouvez pas écrire : "abc"+0.5+!25/12/96!-?00:30:45?, car cette opération génère une erreur de syntaxe.

Le tableau ci-dessous liste les types de données pouvant être convertis, le type dans lequel ils peuvent être convertis, ainsi que les fonctions 4D à utiliser :

Types à convertiren Chaîneen Numériqueen Dateen Heureen Booléen
Chaîne (1)NumDateTimeBool
Numérique (2)StringBool
DateStringBool
TimeStringBool
BooleanNum

(1) Les chaînes formatées en JSON peuvent être converties en données scalaires, objets ou collections à l'aide de la commande JSON Parse.

(2) Les valeurs de type Heure peuvent être utilisées en tant que numériques.

Note : Ce tableau ne traite pas les conversions de données plus complexes obtenues à l'aide d'une combinaison d'opérateurs et d'autres commandes.