Quelle est la différence entre et et aussi dans VB.NET Je ne sais pas.
In VB.NET, Quelle est la différence entre And
et AndAlso
? Qui dois-je utiliser?
10 réponses
l'opérateur And
évalue les deux côtés, où AndAlso
évalue le côté droit si et seulement si le côté gauche est vrai.
un exemple:
If mystring IsNot Nothing And mystring.Contains("Foo") Then
' bla bla
End If
ci-dessus renvoie une exception si mystring = Nothing
If mystring IsNot Nothing AndAlso mystring.Contains("Foo") Then
' bla bla
End If
celui-ci ne jette pas une exception.
donc si vous venez du C # world, vous devez utiliser AndAlso
comme vous utiliseriez &&
.
plus d'informations ici: http://www.panopticoncentral.net/2003/08/18/the-ballad-of-andalso-and-orelse /
l'opérateur And
vérifiera toutes les conditions de l'énoncé avant de continuer, tandis que L'opérateur Andalso s'arrêtera s'il sait que la condition est fausse. Par exemple:
if x = 5 And y = 7
vérifie si x est égal à 5, et si y est égal à 7, alors continue si les deux sont vrais.
if x = 5 AndAlso y = 7
vérifie si x est égal à 5. Si ce n'est pas le cas, il ne vérifie pas si y est 7, parce qu'il sait que la condition est déjà fausse. (Ce qui est appelé de court-circuit.)
généralement, les gens utilisent la méthode du court-circuitage s'il y a une raison de ne pas vérifier explicitement la deuxième partie si la première partie n'est pas vraie, comme si elle lancerait une exception si elle était cochée. Par exemple:
If Not Object Is Nothing AndAlso Object.Load()
si celle-ci utilisait And
au lieu de AndAlso
, elle essaierait toujours de Object.Load()
même si elle était nothing
, ce qui lancerait une exception.
fait intéressant, aucune des réponses ne mentionnait que And
et Or
en VB.NET sont des opérateurs de bits alors que OrElse
et AndAlso
sont strictement des opérateurs booléens.
Dim a = 3 OR 5 ' Will set a to the value 7, 011 or 101 = 111
Dim a = 3 And 5 ' Will set a to the value 1, 011 and 101 = 001
Dim b = 3 OrElse 5 ' Will set b to the value true and not evaluate the 5
Dim b = 3 AndAlso 5 ' Will set b to the value true after evaluating the 5
Dim c = 0 AndAlso 5 ' Will set c to the value false and not evaluate the 5
Note : un entier non Zéro est considéré comme true
; Dim e = not 0
va mettre e
à -1
démontrant Not
est aussi un opérateur de bit.
||
et &&
(la C # versions de OrElse
et AndAlso
) retourner la dernière expression évaluée qui serait 3
et 5
respectivement. Cela vous permet d'utiliser l'idiome v || 5
dans C# pour donner 5
comme valeur de l'expression quand v
est null
ou ( 0
et un entier) et la valeur de v
autrement. La différence dans la sémantique peut attraper un programmeur C# VB.NET off guard comme cet "idiom valeur par défaut" ne fonctionne pas dans VB.NET.
ainsi, pour répondre à la question : utilisez Or
et And
pour les opérations de bits (entier ou booléen). Utilisez OrElse
et AndAlso
pour" court-circuiter " une opération pour gagner du temps, ou tester la validité d'une évaluation avant de l'évaluer. If valid(evaluation) andalso evaluation then
ou if not (unsafe(evaluation) orelse (not evaluation)) then
Bonus: Quelle est la valeur de ce qui suit?
Dim e = Not 0 And 3
If Bool1 And Bool2 Then
évalue Bool1 et Bool2
If Bool1 AndAlso Bool2 Then
évalue Bool2 si et seulement si Bool1 est vrai.
juste pour tous ceux qui disent que les effets secondaires sont mauvais: un endroit où avoir deux effets secondaires dans une condition est bon serait de lire deux objets de fichier en tandem.
While File1.Seek_Next_Row() And File2.Seek_Next_Row()
Str1 = File1.GetRow()
Str2 = File2.GetRow()
End While
L'Utilisation du And
garantit qu'une rangée est consommée chaque fois que l'état est vérifié. Tandis que AndAlso
pourrait lire la dernière ligne de File1
et laisser File2
sans ligne consommée.
bien sûr le code ci-dessus ne fonctionnerait pas, mais je utilisez des effets secondaires comme celui-ci tout le temps et ne considérerait pas comme " mauvais " ou " mal " code que certains vous conduirait à croire. Il est facile à lire et efficace.
une façon simple d'y penser est d'utiliser un Anglais encore plus simple
If Bool1 And Bool2 Then
If [both are true] Then
If Bool1 AndAlso Bool2 Then
If [first is true then evaluate the second] Then
AndAlso est proche Et, sauf qu'il fonctionne comme && en C#, C++, etc.
la différence est que si la première clause (celle qui précède L'Andalousie) est vraie, la seconde clause n'est jamais évaluée - l'expression logique composée est"court-circuité".
ceci est parfois très utile, par exemple dans une expression telle que:
If Not IsNull(myObj) AndAlso myObj.SomeProperty = 3 Then
...
End If
en utilisant l'ancienne et dans l'expression ci-dessus lancerait une NullReferenceException si myObj sont nulles.
Voir Aussi débordement de la pile question: devrais-je toujours utiliser les opérateurs AndAlso et OrElse? .
Aussi: Un commentaire pour ceux qui ont mentionné l'aide de And
si la partie droite de l'expression est un des effets secondaires dont vous avez besoin:
si le côté droit a un effet secondaire dont vous avez besoin, il suffit de le déplacer vers le côté gauche plutôt que d'utiliser "et". Vous avez seulement vraiment besoin de " et " si les deux les côtés ont des effets secondaires. Et si vous avez autant d'effets secondaires, vous faites probablement quelque chose de mal. En général, vous devriez vraiment préférer aussi.
en plus des réponses ci-dessus, AndAlso fournit un processus de conditionnement connu sous le nom de court-circuitage. De nombreux langages de programmation ont cette fonctionnalité intégrée comme vb.net permet, et peut fournir des augmentations substantielles de performance dans les énoncés de condition longue en découpant les évaluations qui ne sont pas nécessaires.
une autre condition similaire est la condition OrElse qui ne vérifierait la bonne condition que si la condition gauche est fausse, coupant ainsi vérifications non essentielles de l'état une fois qu'un État véritable a été trouvé.
je vous conseille de toujours utiliser des processus de court-circuitage et de structurer vos énoncés conditionnels de manière à en tirer le plus grand profit. Par exemple, testez d'abord vos conditions les plus efficaces et les plus rapides de sorte que vous n'exécutez vos conditions longues que lorsque vous devez absolument et court-circuitez les autres fois.
pour la majorité D'entre nous OrElse et AndAlso fera l'affaire sauf pour quelques exceptions confuses (moins de 1% où nous pouvons avoir à utiliser ou et et).
essayez de ne pas vous laisser emporter par les gens qui montrent leur logique booléenne et qui la font passer pour une science de fusée.
c'est assez simple et simple et parfois votre système peut ne pas fonctionner comme prévu parce qu'il n'aime pas votre logique en premier lieu. Et pourtant ton cerveau il n'arrête pas de vous dire que sa logique est 100% testée et prouvée et qu'elle devrait fonctionner. À ce moment précis, arrêtez de faire confiance à votre cerveau et lui demander de réfléchir à nouveau ou (pas OrElse ou peut-être OrElse) vous forcer à chercher un autre emploi qui ne nécessite pas beaucoup de logique.