4D v18Types de données |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v18
Types de données
|
Types de données | Champ | Variable | Expression |
Chaîne (cf. note 1) | Oui | Oui | Oui |
Numérique (cf. note 2) | Oui | Oui | Oui |
Date | Oui | Oui | Oui |
Heure | Oui | Oui | Oui |
Booléen | Oui | Oui | Oui |
Image | Oui | Oui | Oui |
Pointeur | Non | Oui | Oui |
BLOB (cf. note 3) | Oui | Oui | Oui |
Tableau (cf. note 4) | Non | Oui | Non |
Entier 64 bits (cf. note 5) | Oui | Non | Non |
Float (cf. note 5) | Oui | Non | Non |
Objet | Oui | Oui | Oui |
Collection | Non | Oui | Non |
Variant | Non | Yes | Non |
Indéfini | Non | Oui | Oui |
Null | Non | Non | Oui |
Notes
(1) Une chaîne peut être un champ alphanumérique, une variable de longueur fixe, ou encore une variable ou un champ de type Texte.
(2) Un numérique peut être une variable ou un champ de type Réel (Numérique), Entier et Entier long.
(3) BLOB est l'abréviation de Binary Large OBject. Pour plus d'informations sur les BLOBs, reportez-vous à la section Commandes du thème BLOB.
(4) Les tableaux peuvent être de tout type. Pour plus d'informations, reportez-vous à la section Tableaux.
(5) Le type Entier 64 bits est géré uniquement via le SQL. Il est déconseillé de le manipuler via le langage 4D, car dans ce cas il est converti en Réel, ce qui peut entraîner des pertes de précision.
Chaîne est un terme générique utilisé pour :
Il n'y a aucune différence entre une variable alphanumérique et une variable texte.
Vous pouvez assigner un alpha à un texte et vice-versa, 4D effectue automatiquement la conversion, en tronquant les valeurs si nécessaire. Vous pouvez mélanger du texte et de l'alphanumérique dans les expressions.
Note : Dans ce manuel de référence du langage 4D, les paramètres de type Alpha et Texte dans les descriptions des commandes sont indifféremment appelés Chaîne, sauf spécification explicite.
Numérique est un terme générique utilisé pour :
Les nombres de type Réel sont compris dans l'intervalle ±1.7e±308 (13 chiffres significatifs).
Les nombres de type Entier (2 octets) sont compris dans l'intervalle -32 768..32 767
Les nombres de type Entier long (4 octets) sont compris dans l'intervalle -2^31..(2^31)-1
Vous pouvez assigner tout nombre d'un type numérique à un nombre d'un autre type numérique, 4D effectue automatiquement la conversion, en tronquant ou en arrondissant les valeurs si nécessaire. Notez cependant que lorsqu'une valeur est située en-dehors de l'intervalle du type de destination, 4D ne pourra la convertir. Vous pouvez mélanger tous les types de numériques au sein d'une même expression.
Note : Dans ce manuel de référence du langage 4D, quel que soit le type précis des données, les paramètres de type Réel, Entier et Entier long dans les descriptions des commandes sont appelés numériques, sauf spécification explicite.
Note : Dans ce manuel de référence du langage 4D, les paramètres de type Date dans les descriptions des commandes sont appelés Date, sauf spécification explicite.
Les dates en JavaScript étant des objets, elles sont envoyées à 4D sous forme de textes contenant leur forme JSON comme tout autre objet. Ce principe est mis en oeuvre notamment lors de l’utilisation des fonctionnalités 4D Mobile et Zone Web.
La forme JSON de l’objet Date JavaScript suit la norme ISO 8601, par exemple "2013-08-23T00:00:00Z".
Il est de votre ressort de convertir ce texte en date 4D (C_DATE). Deux solutions sont proposées :
C_TEXTE($1) // réception d'une date au format ISO
C_DATE($d)
$d:=JSON Parse("\""+$1+"\"";Est une date)
C_TEXTE($1) // réception d'une date au format ISO
C_DATE($d)
$d:=Date($1)
A noter une différence entre ces deux solutions : JSON Parse respecte le mode de conversion éventuellement défini avec la commande FIXER PARAMETRE BASE tandis que Date n’y est pas assujetti : la conversion avec Date s’effectue toujours en tenant compte du fuseau horaire courant.
Note : A compter de 4D v16 R6, si le paramétrage courant relatif au stockage des dates dans les objets est "Type date", les chaînes date JSON au format "YYYY-MM-DD" sont automatiquement traitées en tant que valeurs date par les commandes JSON Parse et Date. Pour plus d'informations sur ce paramétrage, veuillez vous reporter à l'option "Utiliser le type date au lieu du format date ISO dans les objets" dans la Page Compatibilité.
Note : Dans ce manuel de référence du langage 4D, les paramètres de type Heure dans les descriptions des commandes sont appelés Heure, sauf spécification explicite.
Les variables, champs ou expressions de type Booléen peuvent être soit à VRAI soit à FAUX.
Note : Dans ce manuel de référence du langage 4D, les paramètres de type Booléen dans les descriptions des commandes sont appelés Booléen, sauf spécification explicite.
Les variables, champs ou expressions de type Image peuvent contenir des images Windows ou Macintosh. En général, ce type accepte toute image pouvant être collée dans le Presse-papiers ou bien lue depuis le disque à l'aide des commandes de 4D ou d'un plug-in.
Note : Dans ce manuel de référence du langage 4D, les paramètres de type Image dans les descriptions des commandes sont appelés Image, sauf spécification explicite.
Les variables ou expressions de type Pointeur sont des références à d'autres variables (y compris des tableaux et des éléments de tableaux), à des tables ou à des champs. Il n'existe pas de champs de type Pointeur.
Pour plus d'informations sur les pointeurs, reportez-vous à la section Pointeurs.
Note : Dans ce manuel de référence du langage 4D, les paramètres de type Pointeur dans les descriptions des commandes sont appelés Pointeur, sauf spécification explicite.
Les champs, variables ou expressions de type BLOB sont des séries d'octets (d'une longueur de 0 à 2 Go) que vous pouvez adresser individuellement ou à l'aide des Commandes du thème BLOB.
Note : Dans ce manuel de référence du langage 4D, les paramètres de type BLOB dans les descriptions des commandes sont appelés BLOB.
Les variables, champs ou expressions de type objet peuvent contenir des données de divers types. La structure des objets "natifs" 4D est basée sur le principe classique des paires "propriété/valeur" (aussi appelées "attribut/valeur). La syntaxe de ces objets s’inspire du JSON, mais ne le suit pas entièrement.
Attention : N'oubliez pas que les noms de propriétés tiennent compte des majuscules/minuscules.
Pour gérer les variables, champs ou expressions de type objet, vous pouvez utiliser la notation objet (cf. Utiliser la notation objet) ou les commandes 4D du thème Objets (Langage), comme OB Lire et OB FIXER. A noter que des commandes spécifiques du thème Recherches et tris telles que CHERCHER PAR ATTRIBUT, TRIER PAR ATTRIBUT et CHERCHER PAR ATTRIBUT DANS SELECTION permettent d'effectuer des traitements sur les champs objets.
Comme les champs objet sont essentiellement basés sur du texte, le contenu d'un champ objet est représenté dans un formulaire 4D par défaut sous forme de texte formaté en JSON.
(*)Lorsqu'elles sont exposées sous forme de texte dans le débogueur ou exportées en JSON, les propriétés d'objet de type image indiquent "[objet Image]". Attention dans ce cas, si l'enregistrement est sauvegardé, la chaîne "[objet Image]" sera stockée au lieu de l'image.
Note : Pour travailler avec des objets en JSON, utilisez les commandes du thème JSON.
Une variable de type Collection contient une liste ordonnée de valeurs de types différents, par exemple :
C_COLLECTION($col)
$col:=Creer collection("Ford";"Renault";"Nissan";500;100;true)
//$col=["Ford","Renault","Nissan",500,100,true]
Les types de valeurs suivants sont pris en charge : texte, numérique, objet, booléen, collection ou null. Les champs et les expressions ne peuvent pas être de type Collection.
Pour manipuler les variables de type collection, vous devez utiliser la notation objet (cf. Utiliser la notation objet) ou les commandes du thème Collections.
Exemple :
C_COLLECTION($col)
$col:=Creer collection("Ford";"Renault";"Nissan")
$col[1]:="BMW"
//$col=["Ford","BMW","Nissan"]
Les variables de type Collection contiennent des tableaux JSON. Un tableau JSON est une suite de valeurs de divers types séparées par des virgules. Vous pouvez stocker des tableaux JSON dans des variables de type Collection.
Exemples :
C_COLLECTION($c1;$c2)
C_TEXTE($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 est un type de variable qui permet d'encapsuler, dans une variable, des données de tous types, valides et fixes. Typiquement, ce type de variable peut être utilisé pour écrire du code générique qui retourne ou qui reçoit des valeurs dont le type est inconnu. C'est le cas, par exemple, des attributs des objets de gestion de code.
Une variable de type variant peut contenir une valeur de l'un des types de données suivants :
Note : Les tableaux ne peuvent pas être stockés dans des variables de type variant.
En modes compilé et interprété, il est possible d'assigner la même variable de type variant à des contenus de différents types. Contrairement aux types des variables fixes, le type de contenu d'une variable variant est différent du type de la variable variant elle-même. Par exemple :
C_VARIANT($variant)
$variant:="hello world"
$vtype:=Type($variant) // 12 (Est un variant)
$vtypeVal:=Value type($variant) // 2 (Est un texte)
$variant:=42
$vtype:=Type($variant) // 12 (Est un variant)
$vtypeVal:=Value type($variant) // 1 (Est un réel)
Vous pouvez utiliser des variables variant là où des variables sont attendues; veillez simplement à ce que le type du contenu des données soit attendu. Lorsque vous accédez aux variables variant, seule leur valeur courante est prise en compte. Par exemple :
C_VARIANT($v)
$v:="hello world"
$v2:=$v //assigne une variable à une autre variable
$t:=Type($v) // 12 (Est un variant)
$t2:=Type($v2) // 2 (Est un texte)
Les variants peuvent être utilisés pour déclarer des paramètres de méthodes ($0, $1,...) qui peuvent être de différents types. Dans ce cas, vous pouvez créer votre code en testant le type de valeur du paramètre, comme par exemple :
C_VARIANT($1)
Au cas ou
:(Value type($1)=Est un entier long)
...
:(Value type($1)=Est un texte)
...
Fin de cas
Note : Lorsque les variables variant ne sont pas nécessaires (lorsque le type de données est connu), il est recommandé d'utiliser des variables typées fixes. Les variables typées fixes garantissent une meilleure performance et un code plus clair, et permettent au compilateur d'éviter des bugs pouvant être liés au passage de types de données inattendus.
Indéfini n'est pas véritablement un type de données. Une variable dite "indéfinie" est une variable n'ayant pas encore été définie. Une fonction utilisateur (c'est-à-dire une méthode projet qui retourne une valeur) peut retourner une valeur indéfinie si, à l'intérieur de la méthode, le résultat de la fonction ($0) est assigné à une expression indéfinie (une expression issue d'un calcul effectué avec au moins une variable indéfinie). Un champ ne peut pas être indéfini (la commande Indefinie retourne toujours Faux pour un champ). Par défaut, une variable variant prend la valeur Indéfini.
Null est un type de données particulier avec une seule valeur possible : null. Cette valeur est retournée par une expression qui ne contient aucune valeur.
Du point de vue de la base de données 4D, la valeur null exprime le fait que la valeur de la donnée n'est pas connue. Cela ne signifie PAS que cette valeur est vide ("" pour les chaînes ou 0 pour un entier long sont des valeurs vides). Dans la base de données 4D, les valeurs nulles dans les champs (excepté pour les attributs des champs objets) sont prises en charge via le moteur SQL. Une option spécifique pour les champs vous permet de configurer la manière dont la base doit interpréter cette valeur (Traduire les NULL en valeurs vides) et vous pouvez fixer ou lire les valeurs nulles à l'aide des commandes Valeur champ Null et FIXER VALEUR CHAMP NULL.
Dans le langage de 4D et pour les attributs des champs objets, les valeurs null sont gérées via la commande Null. Cette commande peut être utilisée avec les expressions suivantes pour fixer ou comparer la valeur null :
Les tableaux ne sont pas véritablement un type de données. Sous cette appellation sont regroupés les différents types de tableaux (comme les tableaux entier, tableaux texte, etc.). Les tableaux sont des variables. Il n'existe pas de champs ni d'expressions de type Tableau. Pour plus d'informations sur les tableaux, reportez-vous à la section Tableaux.
Note : Dans ce manuel de référence du langage 4D, les paramètres de type Tableau dans les descriptions des commandes sont appelés Tableau, sauf spécification explicite (par exemple Tableau Texte, Tableau Réel...).
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 à convertir | en Chaîne | en Numérique | en Date | en Heure |
Chaîne (*) | Num | Date | Heure | |
Numérique (**) | Chaine | |||
Date | Chaine | |||
Heure | Chaine | |||
Booléen | Num | |||
Objet | JSON Stringify | |||
Collection | JSON Stringify |
(*) Les chaînes formatées en JSON peuvent être converties en données scalaires, objets ou collections à l'aide de la commande JSON Parse.
(**) 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.
Guide du typage
Méthodes
Pointeurs
Présentation des commandes JSON
Présentation des tableaux
Type
Utilisation des directives de compilation
Variables
Produit : 4D
Thème : Présentation du langage
Nom intl. : Data Types
Modifié : 4D v16 R4
Modifié : 4D v16 R6
Modifié : 4D v18
4D - Langage ( 4D v18)