Visual Basic .NET: Bool'sche Operatoren

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Die im vorherigen Unterkapitel besprochenen Vergleichsoperatoren verarbeiten alle uns bis jetzt bekannten Datentypen und geben Boolean-Werte zurück. Mit den Bool'schen Operatoren lernen wir eine weitere Gruppe von Operatoren kennen, die mit den Vergleichsoperatoren den Rückgabetyp, nämlich Boolean gemein hat. Anders als letztere fordern die Bool'schen Operatoren aber auch als Operanden Boolean-Werte. Damit eignen sie sich in der Praxis hervorragend, um die Ergebnisse mehrerer Vergleichsoperationen zu verknüpfen.

Die Bool'schen Operationen heben sich von der großen Masse der Operationen auch dadurch ab, dass ihre Operatoren aus Worten bestehen, nicht aus Sonderzeichen. In dieser Hinsicht sind sie dem Operator Mod sehr ähnlich, der offensichtlich auch aus einem Wort besteht.

Negation[Bearbeiten]

Bisher haben wir nur Operatoren kennengelernt, die zwei Operanden benötigen. Diese heißen binäre Operatoren (griech. bi- = zwei). Der Negationsoperator Not benötigt nur einen Operanden. Deshalb ist er ein sogenannter unärer Operator (griech. uni- = eins). Not gibt das Gegenteil des Wertes des Operanden zurück. Ist der Operand True, gibt die Operation False zurück, ist der Operand False, gibt die Operation True zurück. Ein Beispiel:

Crystal Clear app terminal.png Code:  

Dim a As Boolean = Not True
Dim b As Boolean = Not Not True

Crystal Clear app kscreensaver.png Ausgabe:  

a = False
b = True

Die erste Zeile zeigt die Verwendung von Not. Der Operator wird immer vor dem Operanden notiert. Diese Schreibweise heißt Präfix-Notation (griech. prä- = vorher; der Operator kommt vorher), das Gegenteil (Operator nach dem Operand) heißt Postfix-Notation. Letztere tritt in Visual Basic nie auf, deshalb sind diese Begriffe zwar nett zu wissen, aber in Visual Basic nicht von Belang.

In der ersten Zeile zeigt sich erstmals richtig ein Phänomen von Visual Basic, dass in anderen Programmiersprachen kaum deutlich wird. Not True heißt übersetzt nicht wahr, also unwahr oder falsch, sprich False. Diese Erscheinung eines im wahrsten Sinne des Wortes „lesbaren“ Codes wird durch die hohe Schlüsselwortdichte in Visual Basic begünstigt, wohingegen andere Sprachen wie C viele Schlüsselworte durch Sonderzeichen ersetzt haben. Die zweite Zeile erscheint auf den ersten Blick sonderbar, eine geschickt gesetzte Klammer enthüllt jedoch die Bedeutung.

Crystal Clear app terminal.png Code:  

Dim b As Boolean = Not (Not True)

Crystal Clear app kscreensaver.png Ausgabe:  

b = True

Der jetzt in Klammern gesetzte Ausdruck wird erst zu False aufgelöst, dann wird der entstandene Ausdruck Not False zu True aufgelöst und b wird mit diesem Ergebnis initialisiert.

Konjunktion[Bearbeiten]

Die Konjunktionsoperation verknüpft zwei Boolean-Werte zu einem Boolean-Wert. Dabei wird True zurückgegeben, wenn beide Operanden True sind, sonst False. Der Operator ist And, wiederum also ein Wortoperator. Der Name leitet sich vom englischen „Und“ ab, da der 1. und der 2. Operand True sein müssen.

Crystal Clear app terminal.png Code:  

Dim a As Boolean = True And True
Dim b As Boolean = True And False
Dim c As Boolean = False And False
Dim d As Boolean = Not False And Not False

Crystal Clear app kscreensaver.png Ausgabe:  

a = True
b = False
c = False
d = True

Beachten Sie, dass Negationen eine höhere Priorität haben als Konjunktionen. Die letzte Zeile ist also äquivalent zu der folgenden Zeile. Diese wird zu a = True And True, dann zu a = True aufgelöst.

Crystal Clear app terminal.png Code:  

Dim d As Boolean = (Not False) And (Not False)

Crystal Clear app kscreensaver.png Ausgabe:  

d = True

Neben dem Operator And gibt es auch den Operator AndAlso. Das Ergebnis ist das gleiche, die Ausführung eine andere. Dazu müssen Sie sich in Erinnerung rufen, dass Operationen nacheinander ausgeführt werden. Der AndAlso-Operator erzwingt eine Neuverteilung der Prioritäten: Zuerst wird der linke Operand aufgelöst. Ist er True, wird auch der rechte Operand aufgelöst und mit And verknüpft. Ist der linke Operand jedoch False, so ist der rechte Operand egal, er wird nicht aufgelöst und die Konjunktion gibt sofort False zurück. Dies bringt statistisch gesehen in 50% aller Fälle einen Geschwindigkeitsvorteil.

Der AndAlso-Operator kann also für zeitkritische Anwendungen verwandt werden, d.h. für Anwendungen, die innerhalb kürzester Zeit zu einem Ergebnis kommen müssen, etwa weil sie viele Aufgaben hintereinander in einer adäquaten Geschwindigkeit ausführen müssen oder weil andere Anwendungen auf ihr Ergebnis warten. Allerdings muss man beim Einsatz des AndAlso-Operators auf die Verwendung von Funktionen im rechten Operanden achten, die evtl. gar nicht ausgeführt werden. (Mit Funktionen werden wir uns später noch genauer befassen.) Für die meisten, nicht zeitkritischen Anwendungen, reicht der And-Operator zur Konjunktion insgesamt voll aus, die Verwendung von AndAlso ist nur minimal schneller.

Adjunktion und Disjunktion[Bearbeiten]

Die Adjunktionsoperation Or und die Disjunktionsoperation Xor ähneln der Konjunktion in der Hinsicht, dass auch sie zwei Boolean-Werte zu einem verknüpfen. Die Or-Operation gibt True zurück, wenn mindestens einer seiner Operanden True ist. Er gibt also nur dann False zurück, wenn beide Operanden False sind. Der Name Or kommt vom englischen Wort für „oder“, da der linke oder der rechte Operand True sein muss, damit True zurückgegeben wird. Den Unterschied zwischen Or und And demonstriert dieses Beispiel, das dem Beispiel zur Konjunktion bis auf den Operator gleicht. Beachten Sie das Ergebnis der zweiten Adjunktion.

Crystal Clear app terminal.png Code:  

Dim a As Boolean = True Or True 'gibt True zurück
Dim b As Boolean = True Or False 'gibt True zurück
Dim c As Boolean = False Or False 'gibt False zurück

Crystal Clear app kscreensaver.png Ausgabe:  

a = True
b = True
c = False

Der AndAlso-Operator findet in der Adjunktion sein Äquivalent im OrElse-Operator. Hier gilt, dass der rechte Operand nicht ausgewertet wird, wenn der linke Operand True ist, da in diesem Fall das Ergebnis auf jeden Fall True ist. Für den OrElse-Operator gelten die gleichen praktischen Einschränkungen, die für den AndAlso-Operator oben schon dargelegt wurden.

Der Xor-Operator gibt True zurück, wenn genau einer seiner zwei Operanden True ist. Er gibt False zurück, wenn keiner der Operanden oder beide Operanden True ist. Der Name des Operators ist die Abkürzung für „exclusive or“, zu deutsch „ausschließendes Oder“, da ein wahrer (True) Operand ausschließt, dass der andere Operand True ist, wenn das Ergebnis True sein soll. Wieder werden dieselben Beispiele wie bei And und Or bemüht, um einen Vergleich (besonders zu Or) zu ermöglichen.

Crystal Clear app terminal.png Code:  

Dim a As Boolean = True Xor True
Dim b As Boolean = True Xor False
Dim c As Boolean = False Xor False

Crystal Clear app kscreensaver.png Ausgabe:  

a = False
b = True
c = False

Vielleicht fällt Ihnen auf, dass a Xor b dasselbe ergibt wie <t>a <> b. Bei Boolean-Operanden kann man dieses Wissen manchmal in einen minimalen Geschwindigkeitsvorteil umsetzen. Muss man aber nicht.

Zusammenfassung[Bearbeiten]

Die nachfolgenden Wertetabellen fassen die Bool'schen Operationen zusammen. Links oben steht der Operator, rechts davon in der oberen Zeile findet sich der Wert des 1. Operands, an der linken Seite (bei binären Operatoren) findet sich der Operand. An der Kreuzung des durch die Operanden markierten Paares aus Zeile und Spalte findet sich der Rückgabewert der Operation.

Not True False
False False True
False
Or True False
True True True
False True False
And True False
True True False
False False False
Xor True False
True False True
False True False