Visual Basic 6: Bedingungen
Bedingungen
BearbeitenBedingungen allgemein
BearbeitenIn 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
BearbeitenDa 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
BearbeitenMö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.