Null et Undefined
Null et Undefined sont des types de données qui gèrent les cas où la valeur d'une expression n'est pas connue.
Null
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. Trying to read a property of a null value returns an error.
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 :
- attributs d'objets
- éléments de collections
- variables of the object, collection, pointer, picture, or variant type (see also Null as default value.
Undefined
Undefined (Indéfinie) n'est pas véritablement un type de données. Il indique une variable n'ayant pas encore été définie. L'évaluation d'une propriété d'objet peut également produire une valeur undefined. Reading a property of an undefined value returns undefined.
A variant variable has undefined as default value.
Un champ ne peut pas être indéfini (la commande Indefinie
retourne toujours Faux pour un champ).
En règle générale, lorsque le code tente de lire ou d'assigner des expressions indéfinies, 4D générera des erreurs, excepté dans les cas suivants :
- Assigning an undefined value to variables (except arrays) has the same effect as calling
CLEAR VARIABLE
with them:
var $o : Object
var $val : Integer
$val:=10 //$val=10
$val:=$o.a //$o.a is undefined (no error), and assigning this value clears the variable
//$val=0
- L'affectation d'une valeur indéfinie à une propriété d'objet existante réinitialise ou efface sa valeur, selon son type :
- Objet, collection, pointeur : Null
- Image : image vide
- Booléen : False
- Chaîne : ""
- Numérique : 0
- Date : !00-00-00! si la base utilise le type date pour les objets, sinon ""
- Heure : 0 (nombre de ms)
- Indéfini, Null : pas de changement
var $o : Object
$o:=New object("a";2)
$o.a:=$o.b //$o.a=0
-
L'affectation d'une valeur indéfinie à une propriété d'objet inexistante ne fait rien.
-
Une valeur indéfinie passée en paramètre à une méthode projet est automatiquement convertie en 0 ou en "" en fonction de la déclaration du type du paramètre.
var $o : Object
mymethod($o.a) //pass an undefined parameter
//In mymethod method
#Declare ($myText : Text) //parameter type is text
// $myText contains ""
- Une expression de condition est automatiquement convertie à Faux lorsqu'elle est évaluée undefined avec les mots-clés If et Case of :
var $o : Object
If($o.a) // false
End if
Case of
:($o.a) // false
End case
Lorsque des expressions d'un type donné sont attendues dans votre code 4D, vous pouvez vous assurer qu'elles auront le type souhaité même en cas de valeur Indéfinie en les encadrant avec la commande de transtypage 4D appropriée : String
, Num
, Time
, Date
, Bool
. Ces commandes retournent une valeur vide du type spécifié lorsque l'expression est évaluée à Indéfinie. Par exemple :
$myString:=Lowercase(String($o.a.b)) //pour être sûr d'obtenir une valeur texte même si indéfinie
//afin d'éviter des erreurs dans le code
Opérateurs sur les Null
Opération | Syntaxe | Retourne | Expression | Valeur |
---|---|---|---|---|
Egalité | Null = Null | Boolean | a.nullProp = b.nullProp | True |
Null = Undefined | Boolean | a.nullProp = b.undefinedProp | True | |
Null = valeur scalaire | Boolean | a.nullProp = 42 | False | |
Inégalité | Null # Null | Boolean | a.nullProp # b.nullProp | False |
Null # Undefined | Boolean | a.nullProp # b.undefinedProp | False | |
Null # scalar value | Boolean | a.nullProp # 42 | True |
Les valeurs scalaires sont des valeurs de type chaîne, date, heure, booléen, nombre ou Blob. Lorsqu'elles sont déclarées, leur valeur par défaut n'est ni undefined ni null. Les autres types (pointeur, image, objet, collection) ont une valeur par défaut undefined ou null. Ex :
var $object : Object
var $text : Text
//$object = null
//$text = ""
Les comparaisons avec les opérateurs Supérieur à (>
), Inférieur à (<
), Supérieur ou égal à (>=
), et Inférieur ou égal à (<=
) ne sont pas prises en charge avec des valeurs Null et renvoient une erreur.
Opérateurs sur les Undefined
Opération | Syntaxe | Retourne | Expression | Valeur |
---|---|---|---|---|
Egalité | Undefined = Undefined | Boolean | a.undefinedProp = b.undefinedProp | True |
Undefined = Null | Boolean | a.undefinedProp = c.nullProp | True | |
Undefined = autres valeurs | Boolean | a.undefinedProp = 42 | False | |
Inégalité | Undefined # Undefined | Boolean | a.undefinedProp # b.undefinedProp | False |
Undefined # Null | Boolean | a.undefinedProp # b.nullProp | False | |
Undefined # autres valeurs | Boolean | a.undefinedProp # 42 | True | |
Supérieur à | Undefined > string, Date, Time, number | Boolean | a.undefinedProp > "abc" | False |
Inférieur à | Undefined < string, Date, Time, number | Boolean | a.undefinedProp < "abc" | False |
Supérieur ou égal à | Undefined >= string, Date, Time, number | Boolean | a.undefinedProp >= "abc" | False |
Inférieur ou égal à | Undefined <= string, Date, Time, number | Boolean | a.undefinedProp <= "abc" | False |
autres valeurs sont des expressions de tout type dont la valeur n'est ni Undefined ni Null.
Comparisons of Undefined values with Pointer, Picture, Boolean, Blob, Object, Collection, Undefined or Null values using Greater than (>
), Less than (<
), Greater than or equal to (>=
), and Less than or equal to (<=
) operators are not supported and return an error.
Exemples
Cet exemple compare les différents résultats de la commande Undefined
et de la commande Null
appliquées aux propriétés d'objets, en fonction du contexte :
var $vEmp : Object
var $result : Boolean
$vEmp:=New object
$vEmp.name:="Smith"
$vEmp.children:=Null
$result:=Undefined($vEmp.name) //False
$result:=($vEmp.name=Null) //False
$result:=Undefined($vEmp.children) //False
$result:=($vEmp.children=Null) //True
$result:=Undefined($vEmp.parent) //True
$result:=($vEmp.parent=Null) //True
Exemples de résultats de comparaisons avec des valeurs undefined et null :
var $result : Boolean
var $vObj : Object
var $vVar : Variant
$vObj:=New object
$vObj.null:=Null
//note that $vVar is not assigned
$result:=($vObj.undefined=42) //False
$result:=($vObj.undefined=$vObj.null) //True
$result:=($vObj.undefined=$vVar) //True
$result:=($vObj.undefined#$vObj.null) //False
$result:=($vObj.undefined#42) //True
$result:=($vObj.undefined#$vVar) //False
$result:=($vObj.undefined>"hello") //False
$result:=($vObj.undefined>$vVar) //Error
$result:=($vObj.undefined>$vObj.null) //Error
$result:=($vVar < 42) //False