Visual Basic 6: Bedingungen

Bedingungen

Bearbeiten

Bedingungen allgemein

Bearbeiten

In einer Bedingung wird ein oder mehrere Zustände abgefragt, und anhand dieser Werte zu Handeln. Kommt es in einem Verarbeitungsprozess zu einer Entscheidungsfrage, dann wird im allg. eine Bedingung abgefragt.

Nehmen wir folgendes Beispiel:

Sie möchten spazieren gehen, und möchten wissen ob Sie einen Schirm mitnehmen sollen oder nicht. Also sehen Sie aus dem Fenster und prüfen, wenn es regnet dann nehmen Sie den Schirm mit, wenn nicht, dann lassen Sie ihn daheim.

Im Code sieht es so aus:

  Dim bIstRegen As Boolean
  Dim sSchirm As String
  
  bIstRegen = False  ' Wir machen mal keinen Regen
  
  If bIstRegen = True Then
     sSchirm = "Mitnehmen"
  Else
     sSchirm = "Zu Hause lassen"
  End If

Natürlich liegt es nun auf der Hand wie es aussieht wenn es regnet:

  Dim bIstRegen As Boolean
  Dim sSchirm As String
  
  bIstRegen = True  ' Wir machen mal Regen
  
  If bIstRegen = True Then
     sSchirm = "Mitnehmen"
  Else
     sSchirm = "Zu Hause lassen"
  End If

Vergleichsoperatoren

Bearbeiten

Da es aber nicht nur Bool'sche Werte gibt, bietet VB auch Vergleichsoperatoren für Numerische und String-Werte. Diese sind im einzelnen:

  • = um zu bestimmen, ob Werte identisch sind
  • <> um zu bestimmen, ob die Werte sich unterscheiden
  • < um zu bestimmen, ob der erste Wert kleiner dem zweiten ist
  • <= um zu bestimmen, ob der erste Wert kleiner oder gleich dem zweiten ist
  • > um zu bestimmen, ob der erste Wert größer als der zweite ist
  • >= um zu bestimmen, ob der erste Wert größer als oder gleich dem zweiten ist

Wobei ersterer Operator, also das =, für so gut wie alle Datentypen funktioniert. Der Ungleich-Operator (<>) funktioniert sowohl bei numerischen Typen als auch bei Boolean, String und Date. Die restlichen Operatoren gelten für numerische Werte.

Ein möglicher Code könnte also so aussehen:

  Dim Wert1 As Long, Wert2 As Long
  
  Wert1 = 5
  Wert2 = 10
  
  If Wert1 <= Wert2 Then
     MsgBox "Wert1 ist kleiner oder die Werte sind identisch."
  Else
     MsgBox "Wert 2 ist kleiner."
  End If

Verknüpfung von Bedingungen

Bearbeiten

Möchte man nun mehrere Bedingungen prüfen, könnte man ja einfach folgendes schreiben:

  Dim Wert1 As Long, Wert2 As Long, Wert3 As Long
  
  Wert1 = 5
  Wert2 = 10
  Wert3 = 10
  
  If Wert1 <= Wert2 Then
     If Wert2 <> Wert3 Then
        MsgBox "Wert1 ist kleiner oder gleich Wert2, Wert2 ist ungleich Wert3."
     End If
  End If

Sie können sich sicherlich schon denken, dass VB dort eine einfachere Methode bietet. Die Möglichkeit ist die Verknüpfung mehrerer Bedingungen durch logische Operatoren. Da diese im Kapitel Visual Basic 6: Operatoren erläutert sind, gehe ich nicht näher auf diese ein, allerdings sollte die Art, wie man sie für Bedingungen verwenden kann, kurz erwähnt werden. Das obige Beispiel ließe sich zum Beispiel mit dem And-Operator realisieren:

  Dim Wert1 As Long, Wert2 As Long, Wert3 As Long
  
  Wert1 = 5
  Wert2 = 10
  Wert3 = 10
  
  If (Wert1 <= Wert2) And (Wert2 <> Wert3)  Then
     MsgBox "Wert1 ist kleiner oder gleich Wert2, Wert2 ist ungleich Wert3."
  End If

Allerdings sind diese beiden Beispiele nicht gleichwertig, beachten Sie zum Beispiel folgende Beispiele:

   If (MsgBox("Erste Bedingung", vbYesNo) = vbYes) And (MsgBox("Zweite Bedingung", vbYesNo) = vbYes) Then
       MsgBox "Beide Bedingungen erfüllt!"
   End If

   If MsgBox("Erste Bedingung", vbYesNo) = vbYes Then
       If MsgBox("Zweite Bedingung", vbYesNo) = vbYes Then
           MsgBox "Beide Bedingungen erfüllt!"
       End If
   End If

Hier wird beim zweiten Beispiel die zweite Frage nur angezeigt, wenn die erste bereits mit Ja beantwortet wurde, also die erste Bedingung erfüllt ist. Beim ersten Beispiel erfolgt die zweite Abfrage immer. Somit ist in manchen Fällen also die geschachtelte If-Abfrage schneller als eine If-Abfrage mit zwei mit And verknüpfte Bedingungen.

Außerdem sei gesagt, dass die Ausdrücke (also Wert1 <= Wert2) im Endeffekt selbst nur einen bool'schen Wert ergeben, sodass dort im Endeffekt steht:

  If True Then
  ' bzw. 
  If False Then

Dieser Umstand bleibt uns zwar verborgen, allerdings können wir ihn uns zunutze machen, um schnell Entscheidungen treffen zu können oder Bedingungen zu formulieren:

  Dim WerteSindGleich As Boolean
  Dim Wert1 As Long, Wert2 As Long
  
  WerteSindGleich = Wert1 = Wert2
  
  If WerteSindGleich Then
     MsgBox "Die Werte sind identisch."
  End If

Die Zeile WerteSindGleich = Wert1 = Wert2 mag zunächst verwirren oder nach einer Mehrfachzuweisung aussehen, aber dies ist nicht der Fall. Zunächst wird nur der Ausdruck Wert1 = Wert2 ausgewertet, welcher daraufhin einen bool'schen Wert erhält. Dieser wird dann der Variablen WerteSindGleich zugewiesen. In der Zeile If WerteSindGleich Then machen wir uns die oben angesprochene Eigenheit zunutze, dass VB einen bool'schen Wert für die Entscheidung erwartet. Die Zeile

  If WerteSindGleich = True Then

hätte zwar im Prinzip denselben Effekt, allerdings wäre ein solcher Abgleich unnötig, da WerteSindGleich = True identisch mit WerteSindGleich ist.