Overblog Folge diesem Blog
Edit post Administration Create my blog
Blog von Olaf Helper

Kurzschlussoperation AndAlso / OrElse

11. Mai 2009 , Geschrieben von Olaf Helper Veröffentlicht in #.NET

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  

Diesen Post teilen

Repost 0

Kommentiere diesen Post