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 ?

Était-ce utile?

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

  1. 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 être Nothing, 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.

  2. IsNothing(object) fait en fait partie d'une partie du Microsoft.VisualBasic.dll.
    Ceci n'est pas souhaitable car vous disposez d'une dépendance inutile à la bibliothèque VisualBasic.

  3. C'est lent - 33,76 % plus lent en fait (plus de 1 000 000 000 d'itérations) !

  4. 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 xing une propriété de il?

    Donc je pense If a IsNot Nothing lit mieux que If 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top