image

Tester si une variable est égale à Nothing

Pour faire suite au post d’hier sur la définition du Nothing en VB, je vous propose de découvrir comment le test d’égalité à Nothing peut très vite conduire à des bugs dans votre code.

C’est en faisant une petite séance de suppression des warnings de compilation sur le projet sur lequel je travaille que j’ai rencontré ce message à plusieurs reprises :

Warning    48    This expression will always evaluate to Nothing (due to null propagation from the equals operator). To check if the value is not null consider using ‘IsNot Nothing’. 

Il y a deux manières d’effectuer des tests d’égalité à Nothing en VB et il est important de bien les distinguer :

  • Pour les types valeurs, on doit utiliser la syntaxe If myValueVar = Nothing
  • Pour les types références, il faut utiliser la syntaxe If myRefVar Is Nothing

Il faut vraiment prêter attention à ces deux contextes d’utilisation car si vous utilisez le Is ou le = dans le cas inverse, votre test ne fonctionnera pas.

Ainsi le code suivant fonctionne parfaitement :

image

Mais le code suivant ne fonctionne pas du tout :

image

Le simple fait de passer la variable en nullable oblige à changer le test d’égalité car on ne passera JAMAIS dans le bloc du IF si on laisse ce code tel quel.

J’ai rencontré ce type de problème à plusieurs reprise sur du code existant, pour une raison donc simple. Les développeurs ont passé des propriétés de type valeur en nullables sans prêter attention à également impacter les différents tests d’égalité à Nothing !

Le code correct est donc le suivant (si on ne souhaite pas utiliser la propriété HasValue) :

image

Il s’agit là d’une source de bug délicate à détecter, et un avertissement qui mériterait bien d’être considéré comme une erreur par le compilateur ! (d’où l’utilité de toujours réduire au maximum le nombre de warnings dans vos projets).

4 réflexions au sujet de « Tester si une variable est égale à Nothing »

  1. Guillaume Lacasa

    Et on ne peut pas utiliser le « Is Nothing » sur des types valeurs ?
    J’ai pris l’habitude d’utiliser Is Nothing à chaque fois (sans vraiment savoir pourquoi, je l’avoue humblement), mais du coup y’a peut-être des bugs dans certains cas 

    Répondre
    1. Patrice Lamarche

      🙂 Genre tu connaissais la différence entre le = et le Is pour l’utilisation du Nothing 😉
      Plus sérieusement, je ne donne pas des cours de VB pour les nuls mais je fais quelques rappels utiles sur les fondamentaux VB car je suis en plein dedans en interne en ce moment.

      Les revues de code révèlent quelques surprises, et tu es bien placé pour le savoir non ? 😉

      Répondre

Répondre à Vincent Bourdon Annuler la réponse.

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *