Was ist der Unterschied zwischen und und AndAlso in VB.NET?
-
08-07-2019 - |
Frage
In VB.NET, was ist der Unterschied zwischen And
und AndAlso
? Welche soll ich verwenden?
Lösung
Der And
Operator wertet beide Seiten, wo AndAlso
die rechte Seite ausgewertet wird, wenn und nur wenn die linke Seite wahr ist.
Ein Beispiel:
If mystring IsNot Nothing And mystring.Contains("Foo") Then
' bla bla
End If
Die oben wirft eine Ausnahme, wenn mystring = Nothing
If mystring IsNot Nothing AndAlso mystring.Contains("Foo") Then
' bla bla
End If
Dies ist nicht eine Ausnahme aus.
Wenn Sie also von der C # Welt kommen, sollten Sie AndAlso
verwenden, wie Sie &&
verwenden würden.
Weitere Informationen hier: http: / /www.panopticoncentral.net/2003/08/18/the-ballad-of-andalso-and-orelse/
Andere Tipps
Der And
wird von einem Operator alle Bedingungen in der Aussage überprüfen, bevor Sie fortfahren, während der AndAlso Betreiber stoppt, wenn es der Zustand kennt falsch ist. Zum Beispiel:
if x = 5 And y = 7
Prüft, ob x gleich 5 ist, und wenn y gleich 7 ist, geht dann, wenn beide wahr sind.
if x = 5 AndAlso y = 7
überprüft, ob x gleich 5 ist, wenn es nicht ist, ist es nicht zu überprüfen, ob y 7, weil sie weiß, dass die Bedingung bereits falsch ist. (Dies ist ein Kurzschluss genannt.)
Im Allgemeinen nutzen die Menschen die Kurzschluss Methode, wenn es ein Grund ist ausdrücklich nicht den zweiten Teil zu prüfen, ob der erste Teil nicht wahr ist, wie wenn es wäre eine Ausnahme auslösen, wenn geprüft. Zum Beispiel:
If Not Object Is Nothing AndAlso Object.Load()
Wenn das verwendete And
statt AndAlso
, wäre es immer noch versuchen sogar Object.Load()
wenn es nothing
, die eine Ausnahme auslösen würde.
Interessanter keine der Antworten erwähnt, dass And
und Or
in VB.NET sind Bitoperatoren während OrElse
und AndAlso
sind streng Booleschen Operatoren.
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
Hinweis : ein nicht Null integer gilt als true
; Dim e = not 0
wird e
auf -1
Not
demonstriert ist auch ein bisschen Operator.
||
und &&
(die C # Versionen von OrElse
und AndAlso
) Rückkehr des zuletzt ausgewerteten Ausdrucks, die jeweils 3
und 5
würden. Auf diese Weise können Sie das Idiom v || 5
in C # 5
als der Wert des Ausdrucks zu geben, wenn v
null
oder (0
und eine ganze Zahl) ist und der Wert von v
anders. Der Unterschied in der Semantik kann einen C # Programmierer in VB.NET unvorbereitet, da dieses „Standardwert Idiom“ Dilettantismus fängt in VB.NET nicht funktioniert.
Also, die Frage zu beantworten : Verwenden Sie Or
und And
für Bit-Operationen (integer oder Boolean). Verwenden Sie OrElse
und AndAlso
zu „Kurzschluss“ eine Betriebszeit zu speichern, oder testen Sie die Gültigkeit einer Auswertung, bevor es zu bewerten. If valid(evaluation) andalso evaluation then
oder if not (unsafe(evaluation) orelse (not evaluation)) then
Bonus: Was ist der Wert der folgenden
?Dim e = Not 0 And 3
If Bool1 And Bool2 Then
Wertet beide Bool1 und Bool2
If Bool1 AndAlso Bool2 Then
Wertet Bool2, wenn und nur wenn Bool1 wahr ist.
Gerade für all jene Menschen, die sagen, Nebenwirkungen sind böse: a. Ort, an dem in einem Zustand zwei Nebenwirkungen gut ist würde das Lesen zwei Dateiobjekte in tandem
While File1.Seek_Next_Row() And File2.Seek_Next_Row()
Str1 = File1.GetRow()
Str2 = File2.GetRow()
End While
die And
ist sichergestellt, dass eine Reihe jedes Mal verbraucht wird die Bedingung geprüft wird. Während AndAlso
könnte die letzte Zeile von File1
lesen und verlassen File2
ohne verbraucht Linie.
Natürlich über den Code nicht funktionieren würde, aber ich benutze Nebenwirkungen wie dies die ganze Zeit und würde es nicht als „ schlecht “ oder „ böse “ Code wie einige würden Sie glauben führen. Es ist leicht zu lesen und effizient.
Eine einfache Möglichkeit, darüber nachzudenken, es auch schlichtere Englisch wird mit
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 ist ähnlich wie Und, außer es wie && in C # funktioniert, C ++, etc.
Der Unterschied besteht darin, dass, wenn die erste Klausel (die vor AndAlso) wahr ist, wird die zweite Klausel nie ausgewertet - die Verbindung logische Ausdruck „kurzgeschlossen“
.Das ist manchmal sehr nützlich, z.B. in einem Ausdruck wie:
If Not IsNull(myObj) AndAlso myObj.SomeProperty = 3 Then
...
End If
die alten und in dem obigen Ausdruck wäre eine Nullreferenceexception auslösen, wenn myObj null war.
Auch Stack-Überlauf Frage finden Sie unter: Sollte ich immer verwenden, um die AndAlso und OrElse Operatoren . / p>
Auch: Ein Kommentar für diejenigen, die And
erwähnt zu verwenden, wenn die rechte Seite des Ausdrucks eine Nebenwirkung, die Sie brauchen:
Wenn die rechte Seite eine Nebenwirkung, die Sie brauchen, nur bewegen sie auf der linken Seite anstatt mit „Und“. Sie müssen nur wirklich „Und“ wenn beide Seiten Nebenwirkungen haben. Und wenn Sie, dass viele Nebenwirkungen gehen auf Sie wahrscheinlich etwas anderes falsch zu machen. In der Regel sollten Sie wirklich AndAlso bevorzugen.
Zusätzlich zu den Antworten oben, AndAlso ein Konditionierungsverfahren als Kurzschlüsse bekannt. Viele Programmiersprachen haben diese Funktionalität eingebaut wie vb.net tut, und kann erhebliche Leistungssteigerungen lange Zustand Aussagen liefern durch Auswertungen Ausschneiden, die unnötigen sind.
Ein weiterer ähnlicher Zustand ist die OrElse Bedingung, die nur den richtigen Zustand überprüfen würde, wenn die linke Bedingung falsch ist, so unnötigen Zustand überprüft Ausschneiden nach einem wahren Zustand gefunden wird.
Ich würde Ihnen raten, immer Kurzschlüsse Prozesse zu nutzen und strukturieren Ihre bedingte Anweisungen in einer Weise, die die meisten von diesen profitieren können. Zum Beispiel testen Sie Ihre effizientesten und schnellste Bedingungen zunächst so, dass Sie nur Ihre lang Bedingungen ausgeführt werden, wenn Sie unbedingt und Kurzschluss der anderen Zeiten.
Für meisten von uns OrElse und AndAlso den Trick mit Ausnahme von ein paar verwirrenden Ausnahmen tun (weniger als 1%, wo wir Oder und und verwenden müssen können).
Versuchen Sie nicht, lassen Sie sich von Menschen ihre boolean Logiken vorführt und macht es wie eine Rakete Wissenschaft aussehen.
Es ist ziemlich einfach und geradlinig und gelegentlich Ihr System möglicherweise nicht wie erwartet, weil es nicht Ihre Logik in erster Linie mag. Und doch Ihr Gehirn hält Sie sagen, dass seine Logik ist zu 100% getestet und bewiesen, und es sollte funktionieren. In diesem Moment zu stoppen Ihr Gehirn zu vertrauen und ihn bitten, wieder zu denken, oder (nicht OrElse oder vielleicht OrElse) Sie sich für einen anderen Job zu suchen zwingen, die nicht viel Logik erfordert.