Kurzschlussoperation AndAlso / OrElse
Mit MS Visual Basic.NET wurden bekanntlich auch einige neue Sprachkontrukte eingeführt. Einige davon sind klein, unscheinbar und kaum erwähnt, aber dafür ungemein praktisch. Wie ich finde gehören dazu die "Kurzschlussoperation" AndAlso und OrElse; komisch eingedeutsche Bezeichnung, erleichter einem aber bestimmte Fallunterscheidungen.
Bei einer logisch And-Verknüpfung in einer Fallunterscheidung werden immer alle Teile ausgewerte, auch wenn der erste schon fehlschlägt; wegen And kann es ja kein positive Ergebnis ergeben, trotzdem werden die weiteren Ergebnisse ermittelt; das ist nicht performant.
Bekannter Fall ist auch eine Prüfung auf DivisionByZero: Man muss erst die Werte prüfen und dann noch in einer weiteren Fallunterscheidung, ob eine Divison ein bestimmtes Ergebnis liefert.
Mit AndAlso kann man das nun abkürzen, siehe hier
Module TestConsole
Sub Main()
Dim val1 As Integer = 1, val2 As Integer = 0
'Prüfung mit AND
'Try/Catch, weil ich schon weiß, das es schief geht (DivByZero)
Try
If val2 <> 0 And (val1 \ val2) = 1 Then
Console.WriteLine("Erstes IF erreicht")
Else
Console.WriteLine("Erstes ELSE erreicht")
End If
Catch ex As Exception
Console.WriteLine(ex.ToString) End Try
'Prüfung mit dem Kurzschlussoperation "AndAlso"
'Der erste Vergleich auf <> 0 schlägt fehl, dadurch
'wird der zweite erst gar nicht ausgewertet. Otimal!
If val2 <> 0 AndAlso (val1 \ val2) = 1 Then
Console.WriteLine("Zweites IF erreicht")
Else
Console.WriteLine("Zweites ELSE erreicht")
End If
'MSDN: AndAlso
'http://msdn.microsoft.com/de-de/library/cb8x3kfz(VS.80).aspx
'MSDN: OrElse
'http://msdn.microsoft.com/de-de/library/ea1sssb2(VS.80).aspx
'MSDN: Logische und bitweise Operatoren in Visual Basic
'http://msdn.microsoft.com/de-de/library/wz3k228a(VS.80).aspx
End Sub
End Module