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?
EDIT: 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 vous en tenir à lui, ou est-il acceptable de les mélanger?
IsNothing()
Réponses:
Si vous regardez le MSIL pendant son exécution, vous verrez qu'il ne se compile pas exactement avec le même code. Lorsque vous utilisez IsNothing (), il effectue en fait un appel à cette méthode au lieu de simplement évaluer l'expression.
La raison pour laquelle j'aurais tendance à me pencher vers l'utilisation de "Is Nothing" est que lorsque je nie, cela devient "IsNot Nothing" plutôt que "Not IsNothing (objet)" qui, personnellement, me semble plus lisible.
la source
Je trouve que Patrick Steele a le mieux répondu à cette question sur son blog: Avoiding IsNothing ()
Je n'ai copié aucune de sa réponse ici, pour m'assurer que Patrick Steele obtiendra le crédit de son poste. Mais je pense que si vous essayez de décider d'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é plus de code, j'ai découvert une autre raison pour laquelle vous devriez éviter cela: il accepte les types de valeur! Évidemment, puisque IsNothing () est une fonction qui accepte un «objet», vous pouvez lui passer tout ce que vous voulez. S'il s'agit d'un type valeur, .NET le placera dans un objet et le passera à IsNothing - qui retournera toujours false sur une valeur encadrée! Le compilateur VB.NET vérifiera la syntaxe de style "Is Nothing" et ne compilera pas si vous essayez de faire un "Is Nothing" sur un type valeur. Mais la fonction IsNothing () compile sans se plaindre. -PSteele - VoteCoffee
la source
Vous devez absolument éviter d'utiliser
IsNothing()
Voici 4 raisons tirées de l'article IsNothing () VS Is Nothing
Plus important encore,
IsNothing(object)
tout lui est-il passé en tant qu'objet, même les types valeur! Étant donné que les types de valeur ne peuvent pas l'êtreNothing
, c'est une vérification complètement inutile.Prenons l'exemple suivant:
Cela compilera et fonctionnera correctement, alors que ceci:
Ne compilera pas, mais le compilateur lèvera l'erreur:
IsNothing(object)
fait en fait partie duMicrosoft.VisualBasic.dll
.Cela n'est pas souhaitable car vous avez une dépendance inutile sur la bibliothèque VisualBasic.
C'est lent - 33,76% plus lent en fait (plus de 1000000000 itérations)!
Peut-être une préférence personnelle, mais se
IsNothing()
lit comme une condition Yoda . Lorsque vous regardez une variable, vous vérifiez son état, avec elle comme sujet de votre enquête.c'est-à-dire fait- il x? --- NON est -
x
ing une propriété de ce ?Donc je pense
If a IsNot Nothing
que c'est mieux queIf Not IsNothing(a)
la source
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 ...
que ça ...
la source
VB est plein de choses comme ça qui essaient de le rendre à la fois "comme l'anglais" et confortable pour les gens qui sont habitués aux langues qui utilisent beaucoup () et {}. Par exemple, du côté "comme l'anglais" ... VB a le mot-clé " Ain't " ... et non, je ne plaisante pas. Et de l'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 ce qui est confortable. Et je pense que c'est plus lisible. Mais optez pour ce qui vous convient le mieux.
la source
Je penche vers l'alternative "Is Nothing", principalement parce qu'elle semble plus OO.
Visual Basic n'a sûrement pas le mot clé Ain't.
la source
J'ai également tendance à utiliser la version Is Nothing partiellement en l'utilisant autant que je le fais en SQL.
la source
J'ai d'abord utilisé IsNothing mais j'ai évolué vers l'utilisation de Is Nothing dans de nouveaux projets, principalement pour la lisibilité. La seule fois où je m'en tiens à IsNothing, c'est si je maintiens le code là où il est utilisé tout au long et je veux rester cohérent.
la source
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é passé.
la source
Nothing
Is Nothing