N’ayez pas peur des valeurs indéfinies

Traduit automatiquement de Deepl

Avec 4D v16 R4, nous avons introduit la Notation Objet qui est une grande amélioration du langage 4D : votre code est rapide, flexible, efficace et élégant ! Cette fonctionnalité a suscité beaucoup d’intérêt sur les forums 4D et nous avons reçu de nombreux commentaires de nos clients soulignant des situations où des valeurs indéfinies rendaient le code difficile à écrire.

Avec 4D v16 R5,, nous avons pris en compte vos retours et avons simplifié l’utilisation des propriétés et valeurs indéfinies avec la Notation d’Objet.

Cette réalisation se compose de deux parties : premièrement, le langage 4D accepte désormais les valeurs indéfinies n’importe où dans une expression en utilisant la notation objet. Deuxièmement, chaque fois que vous attribuez une valeur indéfinie à une variable, celle-ci prend une valeur par défaut en fonction de son type (0 pour un nombre, «  » pour une chaîne, etc.).

Lire une propriété ou une valeur indéfinie

Dans les versions antérieures, la lecture de la propriété d’un objet non existant générait une erreur et arrêtait l’exécution du code. Maintenant, dans 4D v16 R5, cela produit une valeur non définie.

Prenons un exemple où vous voulez vérifier l’existence de la propriété p2 de l’objet dans $o.p1.p2 et vous n’êtes pas sûr que l’objet $o.p1 soit défini :

Dans 4D v16 R4, vous devez d’abord vérifier si la propriété p1 est définie, puis faire de même pour p2:

C_OBJECT($o)
$o :=InitObject
If ($o.p1#Null) // Vérifier si p1 est défini
If ($o.p1.p2#Null) // Vérifier si p2 est défini
$o .p1.p2.p3:="some text"

Dans 4D v16 R5, vous pouvez simplement écrire le code ci-dessous … même si p1 est indéfini.

C_OBJECT($o)
$o :=InitObject
If ($o.p1.p2#Null) // Check immediately if p1 and p2 are defined
$o .p1.p2.p3:="some text"

Convertir les valeurs indéfinies

Les commandes de conversion de TYPE acceptent MAINTENANT des valeurs indéfinies

L’adresse String, Num, Date, et Time acceptent désormais les valeurs indéfinies et renvoient une valeur par défaut en fonction du type. Pour compléter cet ensemble de commandes, nous avons créé une nouvelle commande Bool qui renvoie False lorsque vous passez une valeur indéfinie. Cette mise à jour est particulièrement utile lors de l’appel de commandes 4D.

Par exemple, si une commande 4D attend une expression textuelle comme paramètre, vous ne pouvez pas passer une valeur indéfinie. Vous devez donc écrire ce type de code dans 4D v16 R4 et vérifier si la propriété existe avant d’utiliser la commande 4D :

C_OBJECT($o)
$o :=InitObject
If ($o.p1#Null) // Check if p1 is defined
If ($o.p1.p2#Null) // If p1 is defined, you can now check if p2 is defined

READ PICTURE FILE ($o.p1.p2;$i)
else
READ PICTURE FILE ("";$i)
End if
End if

Dans 4D v16 R5, vous pouvez simplement écrire le code ci-dessous. La commande String vérifie et convertit la valeur indéfinie pour vous. Maintenant, vous n’avez besoin que d’une seule ligne de code au lieu de quatre !

C_OBJECT($o)
$o :=InitObject
// If $0.p1.p2 is undefined, String return "" and READ PICTURE FILE command opens standard Open file dialog box.
READ PICTURE FILE (String($o.p1.p2) ;$i)

Attribution d’une valeur indéfinie

Dorénavant, si vous attribuez une valeur indéfinie à une variable, celle-ci prend la valeur de son type par défaut (0 pour un numérique, «  » pour une chaîne, etc.).

C_LONGINT($l)
$l :=10
$l :=$o.indéfini
// In 4D v16 R4, $l does not change, $l=10
// In 4D v16 R5, $l is reinitialized, $l=0

En fait, vous pouvez maintenant passer une valeur indéfinie comme paramètre à une méthode de projet. Cela fonctionne exactement de la même manière. La valeur est immédiatement convertie en fonction du type de paramètre déclaré et définie sur sa valeur de type par défaut.

Enfin, vous pouvez également transmettre des valeurs indéfinies aux instructions Case of et aux instructions If. Dans ce cas, 4D considère une valeur non définie comme étant False:

If ($o.b)
// if $o.b is undefined this code is not executed
..
.
End if

Pour plus de détails, vous pouvez consulter l’article Utilisation de la notation objet.

Fabrice Mainguené
- Product Owner -Fabrice Mainguené a rejoint l'équipe du programme 4D en novembre 2016. En tant que Product Owner, il est en charge de rédiger les user stories puis de les traduire en spécifications fonctionnelles. Son rôle est également de s'assurer que l'implémentation de la fonctionnalité livrée répond au besoin du client.Après avoir obtenu une licence en informatique au CNAM, Fabrice a rejoint une petite société d'édition de logiciels en tant que développeur Windev. Il a ensuite travaillé pour différentes entreprises dans les domaines de l'industrie et du commerce en tant que développeur Windev et web ainsi que conseiller technique sur les nouvelles fonctionnalités.