VB.NET – IsNothing versus Is Nothing
Question
Est-ce que quelqu'un ici utilise VB.NET et a une forte préférence pour ou contre l'utilisation IsNothing
par opposition à Is Nothing
(Par exemple, If IsNothing(anObject)
ou If anObject Is Nothing...
) ?Si oui, pourquoi?
MODIFIER:Si vous pensez qu'ils sont tous les deux également acceptables, pensez-vous qu'il est préférable d'en choisir un et de s'y tenir, ou est-il acceptable de les mélanger ?
La solution
Si vous jetez un œil au MSIL au fur et à mesure de son exécution, vous verrez qu'il ne se compile pas exactement avec le même code.Lorsque vous utilisez IsNothing(), cela appelle en fait cette méthode au lieu de simplement évaluer l'expression.
La raison pour laquelle j'aurais tendance à utiliser "Is Nothing" est que lorsque je nie, cela devient "IsNot Nothing" plutôt que "Not IsNothing (object)" qui, personnellement, me semble plus lisible.
Autres conseils
Je trouve que Patrick Steele a mieux répondu à cette question sur son blog : Éviter IsNothing()
Je n'ai copié aucune de sa réponse ici, pour garantir que Patrick Steele soit crédité pour son message.Mais je pense que si vous essayez de décider si vous devez utiliser Is Nothing ou IsNothing, vous devriez lire son message.Je pense que vous conviendrez que Is Nothing est le meilleur choix.
Edit - Commentaire de VoteCoffe ici
Contenu partiel de l'article :Après avoir examiné davantage de code, j'ai découvert une autre raison pour laquelle vous devriez éviter cela :Il accepte les types valeur !Évidemment, puisque IsNothing() est une fonction qui accepte un « objet », vous pouvez lui transmettre tout ce que vous voulez.S'il s'agit d'un type valeur, .NET le placera dans un objet et le transmettra à IsNothing - qui renverra toujours false sur une valeur encadrée !Le compilateur VB.NET vérifiera la syntaxe du style « Is Nothing » et ne compilera pas si vous essayez d'effectuer un « Is Nothing » sur un type valeur.Mais la fonction IsNothing() compile sans problème.-PSteele – VoteCoffee
Il faut absolument éviter d'utiliser IsNothing()
Voici 4 raisons de l'article IsNothing() VS n'est rien
Plus important encore,
IsNothing(object)
tout lui est-il transmis en tant qu'objet, même les types valeur !Puisque les types valeur ne peuvent pas êtreNothing
, c’est un chèque complètement inutile.
Prenons l'exemple suivant :Dim i As Integer If IsNothing(i) Then ' Do something End If
Cela compilera et fonctionnera correctement, alors que ceci :
Dim i As Integer If i Is Nothing Then ' Do something End If
Ne compilera pas, mais le compilateur générera l'erreur :
L'opérateur « Est » n'accepte pas les opérandes de type « Entier ».
Les opérandes doivent être des types référence ou nullables.IsNothing(object)
fait en fait partie d'une partie duMicrosoft.VisualBasic.dll
.
Ceci n'est pas souhaitable car vous disposez d'une dépendance inutile à la bibliothèque VisualBasic.C'est lent - 33,76 % plus lent en fait (plus de 1 000 000 000 d'itérations) !
Peut-être une préférence personnelle, mais
IsNothing()
se lit comme un État de Yoda.Lorsque vous examinez une variable, vous vérifiez son état, en la plaçant comme sujet de votre enquête.c'est à dire.fait il faire x ?--- PAS Est
x
ing une propriété de il?Donc je pense
If a IsNot Nothing
lit mieux queIf Not IsNothing(a)
Je suis d'accord avec "Is Nothing".Comme indiqué ci-dessus, il est facile de nier avec "IsNot Nothing".
Je trouve cela plus facile à lire...
If printDialog IsNot Nothing Then
'blah
End If
que ça...
If Not obj Is Nothing Then
'blah
End If
VB regorge de choses comme ça, essayant de le rendre à la fois "comme l'anglais" et confortable pour les personnes habituées aux langues qui utilisent beaucoup () et {}.Par exemple, du côté "comme l'anglais"... VB a le "N'est-ce pas" mot-clé... et non, je ne plaisante pas.Et d'un autre côté, comme vous le savez probablement déjà, la plupart du temps, vous pouvez utiliser () avec des appels de fonction si vous le souhaitez, mais ce n'est pas obligatoire.
Je préfère IsNothing()... mais j'utilise C et C#, c'est donc exactement ce qui est confortable.Et je pense que c'est plus lisible.Mais optez pour ce qui vous semble le plus confortable.
Je penche pour l'alternative "Is Nothing", principalement parce qu'elle semble plus OO.
Sûrement Visual Basic n'est-ce pas J'ai obtenu le mot-clé Ain't.
J'ai également tendance à utiliser partiellement la version Is Nothing en l'utilisant autant qu'en SQL.
J'ai d'abord utilisé IsNothing, mais j'ai commencé à utiliser Is Nothing dans des projets plus récents, principalement pour des raisons de lisibilité.La seule fois où je m'en tiens à IsNothing, c'est si je maintiens le code là où il est utilisé partout et que je veux rester cohérent.
Is Nothing nécessite un objet qui a été affecté à la valeur Nothing.IsNothing() peut prendre n'importe quelle variable qui n'a pas été initialisée, y compris de type numérique.Ceci est utile par exemple pour tester si un paramètre facultatif a été transmis.