Vous êtes sur le site Web historique de la documentation de 4D. Les documentations sont progressivement déplacées vers developer.4d.com

Accueil

 
4D v20 R7
Value type

Value type 


 

Value type ( expression ) -> Résultat 
Paramètre Type   Description
expression  Expression in Expression dont la valeur résultante doit être testée
Résultat  Entier long in Numéro du type de données

La commande Value type retourne le type de la valeur résultant de l'évaluation de l'expression passée en paramètre.

La commande retourne une valeur numérique qui peut être comparée aux constantes suivantes du thème Types champs et variables :

Constante Type Valeur
_o_Is float Entier long 35
Is BLOB Entier long 30
Is Boolean Entier long 6
Is collection Entier long 42
Is date Entier long 4
Is longint Entier long 9
Is null Entier long 255
Is object Entier long 38
Is picture Entier long 3
Is pointer Entier long 23
Is real Entier long 1
Is text Entier long 2
Is time Entier long 11
Is undefined Entier long 5
Is variant Entier long 12
Object array Entier long 39

Cette commande est destinée à retourner le type des expressions scalaires, c'est-à-dire des valeurs stockées dans ou retournées par le paramètre expression. En particulier, elle peut être appliquée aux expressions 4D suivantes :

  • propriétés d'objets (emp.name),
  • éléments de collections (myCol[5]).

Note : Les propriétés d'objets numériques ont toujours le type réel :

 C_OBJECT($o)
 $o:=New object("value";42)
 $vType:=Value type($o.value) //$vType=Est un réel

Value type peut être appliquée à toute expression 4D valide, y compris les champs, les variables ou les paramètres. Dans ce cas, à la différence de la commande Type, Value type retourne le type interne de la valeur résultant de l'évaluation de l'expression, et non son type declaré. Comme le langage de 4D convertit certains types de valeurs en interne, le résultat de Value type peut différer du type déclaré. Par exemple, 4D convertit en interne les valeurs des champs de type "Entier 64 bits". Vous pouvez obtenir les résultats suivants :

 $vType1:=Type([myTable]Long64field) //$vType=Est un entier 64 bits
 $vType2:=Value type([myTable]Long64field) //$vType=Est un numérique (en mode interprété)

D'autres différences relatives aux tableaux (l'évaluation d'un tableau retourne l'indice de l'élément courant) et au mode compilé sont à noter. Le tableau suivant liste ces différences :

Type déclaréRésultat de TypeRésultat de Value type (interprété)Résultat de Value type (compilé)Commentaire
TABLEAU TEXTE($t;1)Text arrayIs realIs longint$t contient l'indice de l'élément courant, qui est un numérique
Champ AlphaIs alpha fieldIs textIs text4D manipule en interne toutes les chaînes en texte
Champ EntierIs integerIs realIs longintPour des raisons d'optimisation, en mode interprété toutes les valeurs numériques sont considérées comme des réels et...
Champ Entier longIs longintIs realIs longint... en mode compilé, toutes les valeurs entières sont considérées comme des entiers longs(*)
Champ Entier 64 bitsIs integer 64 bitsIs realIs longint

(*)Si vous voulez effectuer un test de valeur numérique qui soit valide pour les modes interprété et compilé, vous devez écrire un code du type :

 If(Value type($myValue)=Is longint)|(Value type($myValue)=Est un réel)

Note de compatibilité : A compter de 4D v16 R6, les dates sont stockées dans les propriétés d'objets soit avec le type date, soit en texte au format date ISO. Pour plus d'informations, reportez-vous à la description du sélecteur Dates inside objects de la commande SET DATABASE PARAMETER.

Vous souhaitez gérer les divers types possibles de valeurs d'une propriété d'objet :

 Case of
    :(Value type($o.value)=Is real)
  //valeur de type numérique
    :(Value type($o.value)=Is text)
  //valeur de type texte
    :(Value type($o.value)=Is object)
  //valeur de type sous-objet
       ...
 End case

Vous souhaitez obtenir la somme de toutes les valeurs numériques dans une collection :

 C_COLLECTION($col)
 C_REAL($sum)
 $col:=New collection("Hello";20;"World2";15;50;Current date;True;10)
 For($i;0;$col.length-1) //-1 car les collections débutent à 0
    If(Value type($col[$i])=Is real)
       $sum:=$sum+$col[$i]
    End if
 End for
 ALERT(String($sum)) //95



Voir aussi  

OB Get type
Type

 
PROPRIÉTÉS 

Produit : 4D
Thème : Langage
Numéro : 1509

Commande(s) éligible(s) à l'exécution dans un process préemptif

 
PAGE CONTENTS 
 
HISTORIQUE 

Créé : 4D v16 R4

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v20 R7)