Visual Basic .NET: Mathematische Operatoren

Mathematische Operatoren sind der denkbar beste Einstieg in die Thematik der Operatoren. Erstens sind sie (größtenteils) aus dem Alltagsleben vertraut, zweitens kann man an ihnen wichtige Grundbegriffe erklären, die für das Verständnis wichtig sind.

Die 5 Grundrechenarten Bearbeiten

Nach dem Gleichheits- oder Zuweisungsoperator = ist der Additionsoperator + einer der wichtigsten Operatoren. Ihnen ist das "Plus-Zeichen" sicher aus der Schulzeit oder dem Berufsleben bekannt. Er dient dazu, zwei Werte zu addieren. 3 + 5 ergibt 8. Dazu ein Codebeispiel:

  Code:  

Dim a As Integer, b As Integer
a = 8 + 2
b = 10 + a
a = a + 1

  Ausgabe:  

a = 11
b = 20

Dieses Programm führt Additionen aus. Die erste Zeile deklariert zwei Variablen, denen im folgenden Werte zugewiesen werden. Bei der ersten Zuweisung wird man intuitiv feststellen, dass der Variable a der Wert 10 zugewiesen wird. Das ist so korrekt, jedoch möchte ich, um das Verständnis für spätere, komplexere Zusammenhänge zu wahren, etwas genauer auf die Vorgänge in dieser Codezeile eingehen.

Ein Operator führt eine bestimmte Aktion durch. Anders als die uns bisher bekannten Funktionen entsteht dabei aber ein Wert, im Beispiel die Summe von 8 und 2, also 10. Dieser Wert heißt Rückgabewert. (Wir werden später sehen, dass auch Funktionen Rückgabewerte haben können.) Der Operator funktioniert ganz ähnlich wie eine Funktion: Er führt eine Aktion mit seinen Operanden (den Werten links und rechts des Operators) aus, so wie eine Funktion eine Aktion mit den ihr übergebenen Parametern ausführt. Operatoren sind jedoch weit tiefer in die Sprache integriert, man kann, anders als bei Funktionen, keine eigenen Operatoren erschaffen. Visual Basic stellt uns jedoch ein reichhaltiges Operatorenangebot zur Verfügung, das mächtige Manipulationsmöglichkeiten für die Werte der Standarddatentypen eröffnet.

Man kann sich eine Operation in etwa folgendermaßen vorstellen: Der Operator führt seine Aktion durch und ersetzt sich und seine Operanden sinnbildlich mit seinem Rückgabewert. Aus a = 8 + 2 wird durch Ausführen der Additionsoperation a = 10. Die Zuweisungsoperation weist a dann das Ergebnis der Addition, nämlich 10, zu. Beachten Sie, dass der Zuweisungsoperator keinen Rückgabewert hat. Nachdem alle Operationen erfolgreich abgeschlossen wurden, fährt die Ausführung mit der nächsten Zeile fort.

Die dritte Zeile b = 10 + a betont noch einmal die Vielgesichtigkeit von Variablen. Während b als die Speicherzelle interpretiert wird, in der das Ergebnis der Zuweisungsoperation gespeichert wird, wird a als der Wert interpretiert, mit dem gerechnet werden soll. Dieser Wert wird (um die oben erfolgreich eingesetzte Vorstellungskraft erneut zu bemühen) zuerst für a eingesetzt, bevor die Operation ausgeführt wird. In diesem Fall sieht die Abfolge im Computer also so aus:

  • b = 10 + a wird durch Abrufen eines Wertes aus dem Speicher zu b = 10 + 10.
  • b = 10 + 10 wird durch Ausführen einer Additionsoperation zu b = 20.
  • b = 20 wird durch Ausführen der Zuweisungsoperation erfolgreich gelöst.

Auf den ersten Blick erscheint die vierte Zeile unlogisch, schließlich ist a niemals gleich a+1. Diese Interpretationsweise haftet aber noch aus der Mathematik an. Hier muss man erneut sehr scharf zwischen der mathematischen Logik, die es für unmöglich erklärt, dass eine Zahl gleich ihrem Nachfolger ist, und der Informatik, für die dieser Code eine Zuweisung darstellt, trennen. Zuerst wird wieder der Wert von a, zurzeit 10, aus dem Speicher abgerufen und rechts eingesetzt. Dann wird die Addition durchgeführt, die 11 ergibt, dann wird dieses Ergebnis auf a gespeichert.

Operationen können auch bei der Initialisierung innerhalb der Dim-Anweisung verwendet werden. Natürlich können in einer Codezeile auch mehrere Operationen stehen.

  Code:  

Dim a As Integer = 5 + 3 + 2
Dim b As Integer = a + b

  Ausgabe:  

a = 10
b = 10

Im Falle mehrerer gleicher Operationen, hier der zwei Additionen in der ersten Zeile, wird von links nach rechts vorgegangen. Das heißt, dass erst 5 + 3 gerechnet wird und dann 8 + 2 (8 ist das Ergebnis der ersten Addition). Das Ergebnis 10 wird dann auf a gespeichert.

In der zweiten Zeile vermuten Sie wahrscheinlich einen Fehler. Schließlich wird mit b gerechnet, bevor dieser Variable ein Wert zugewiesen wird. Das ist falsch. Wird eine Variable deklariert, wird ihr immer zuerst der Standardwert zugewiesen. Zum Beispiel wird a zuerst mit dem Standardwert 0 und danach mit dem Startwert 10 belegt. Die Variable b wird zunächst mit 0 belegt, dann ergibt die Operation a + b den Wert 10, der auf b gespeichert wird.

Vielleicht wundern Sie sich, warum dieses Kapitel mit Die 5 Grundrechenarten überschrieben ist, wo es doch nur vier gibt. Ich habe jedoch die (im Gegensatz zu anderen Sprachen) in Visual Basic vorhandene und komfortable Potenzoperation dazu gerechnet.

Nach der Addition kommt logischerweise die Subtraktion. Der Operator ist das Minuszeichen bzw. der Bindestrich -. Die Verwendung erfolgt analog zur Addition. Beachten Sie die Links-Vor-Rechts-Regel bei der Reihenfolge von Operationen.

  Code:  

Dim s As Integer = 5 - 3 - 1

  Ausgabe:  

s = 1

Aufgrund der Links-Vor-Rechts-Regel erhält s den Wert 1 und nicht den Wert 3, der sich ergeben würde, wenn man erst die rechte Subtraktion ausführt.

Multiplikation und Division erfolgen über die entsprechenden Operatoren, das Sternchen * für Multiplikationen und den Schrägstrich / für Divisionen.

  Code:  

Dim m As Integer = 5 * 4
Dim d As Single = 5 / 2

  Ausgabe:  

m = 20
d = 2.5


  Code:  

Dim b As Byte = 200 * 200

  Ausgabe:  

Fehler durch Überlauf

Dieser Code verursacht einen Fehler, da die Multiplikationsoperation den Wert 40.000 zurückgibt, dieser Wert jedoch für Byte zu groß ist. Indem man den Datentyp der Variablen in Integer ändert, umgeht man das Problem.

  Code:  

Dim b As Integer = 200 * 200

  Ausgabe:  

b = 40000

Die Potenzoperation ist die fünfte der vier Grundrechenarten (daher auch die Überschrift). Der Potenzoperator ^ (auf der Tastatur zwischen der Tabulatortaste und der Escape-Taste) akzeptiert für die Potenz insbesondere auch Kommazahlen und negative Werte.

  Code:  

Dim p1 As Integer = 3 ^ 2
Dim p2 As Double = 5 ^ 0.5

  Ausgabe:  

p1 = 9
p2 = 2.236...

p2 entspricht der Quadratwurzel von 5. ( )

Ausdruck Bearbeiten

Oft wird Ihnen im Zusammenhang mit Operationen der Begriff Ausdruck begegnen. Einfach ausgedrückt ist alles rechts vom Gleichheitszeichen einer Zuweisungsoperation ein Ausdruck. Zum Beispiel ist 8 + 3 ein Ausdruck. Auch a ist ein gültiger Ausdruck, wenn die Variable a deklariert wurde.

Priorität Bearbeiten

  Code:  

Dim a As Integer = 5 * 2 + 3
Dim b As Integer = 3 + 2 * 5

  Ausgabe:  

a = 13
b = 13

Bestimmt ist Ihnen die Regel "Punkt vor Strich" bekannt. Anscheinend kennt auch Visual Basic die Punkt-vor-Strich-Regel. Um genau zu sein, verfügt Visual Basic über ein viel allgemeineres System zur Bestimmung der Reihenfolge von Operationen. Der zentrale Begriff ist der der Priorität. Operationen mit einer höheren Priorität werden zuerst ausgeführt, dann Operationen mit einer niedrigeren Priorität. Der Potenzoperator hat von allen Operatoren die höchste Priorität, Multiplikation und Division haben eine etwas geringere Priorität, Addition und Subtraktion haben von den bisher eingeführten Operationen die niedrigste Priorität. Eine detaillierte Liste mit der Priorität aller Operatoren ist in diesem Wikibook verfügbar.

Zum Glück gibt es eine Möglichkeit, die Prioritäten auszutricksen. Sicherlich kennen Sie Klammern schon aus der Mathematik, wo eine geklammerte Addition vor einer Multiplikation ausgeführt wird. So ist 5 * 2 + 3 = 13, aber 5 * (2 + 3) = 25. Klammern dürfen auch in Visual Basic jederzeit eingesetzt werden, um die Priorität umzuverteilen. Davon ausgenommen ist der Zuweisungsoperator =, nur Ausdrücke rechts davon dürfen geklammert werden. (Nebenbei bemerkt darf auch nur eine Zuweisungsoperation pro Zeile stehen.)

Nachfolgend ein paar Beispiele zur Priorität, der Umgehung derselben durch Klammern, und über den Sinn und Unsinn von Klammerwäldern.

  Code:  

Dim OhneKlammern As Integer = 5 + 3 ^ 2
Dim MitKlammern As Integer = (5 + 3) ^ 2
Dim SovielKlammernWieMöglich As Integer = (((5) + (3)) ^ (2))

  Ausgabe:  

OhneKlammern = 14
MitKlammern = 64
SovielKlammernWieMöglich = 64

Die letzte Zeile zeigt einerseits, dass auch um einzelne Werte Klammern gesetzt werden darf, und andererseits, dass Klammern die Lesbarkeit sehr verringern. Setzen Sie Klammern deshalb nur mit Bedacht ein. (Übrigens: In der letzten Codezeile sind eigentlich noch mehr Klammern möglich, zum Beispiel könnte man statt (5) auch (((5))) schreiben können, aber warum sollte man?)

Mit der obengenannten Regel für Ausdrücke (alles rechts vom Gleichheitszeichen der Zuweisungsoperation ist ein Ausdruck) ergibt sich, dass Ausdrücke neben Werten, Operatoren und Variablennamen auch Klammern enthalten dürfen. Zum Beispiel ist 3 * (5 + Temp) ein gültiger Ausdruck, wenn es eine Variable Temp gibt.

Ganzzahlige Divisionen Bearbeiten

Auf den ersten Blick mag es unsinnig erscheinen, noch eine Art der Division einzuführen. Es wird sich aber zeigen, dass ganzzahlige Divisionen sehr interessante Möglichkeiten der schnellen, einfachen und ressourcenschonenden Programmierung ermöglichen.

Was sind nun ganzzahlige Divisionen? Erinnern wir uns dabei an die Grundschule zurück, in der man noch keine Kommazahlen kannte. Rechnete man damals „19 durch 5“, so war das Ergebnis nicht „3,8“, sondern „3 mit Rest 4“. Genau diese Ergebnisse liefert die ganzzahlige Division, die in Visual Basic auf zwei Operatoren aufgeteilt ist. Der Operator \ liefert das eigentliche Ergebnis, der Operator Mod den Rest. Das folgende Beispiel setzt die ganzzahlige Division „19 durch 5“ in Visual Basic in Visual Basic .NET um.

  Code:  

Dim a As Integer = 19 \ 5
Dim b As Integer = 19 Mod 5

  Ausgabe:  

a = 3
b = 4

Auf den ersten Blick erscheint der Operator Mod seltsam, schließlich handelt es sich nicht um ein Sonderzeichen, sondern um ein Wort (genauer die Kurzform von   Modulo). Es wird sich aber schon im nächsten Kapitel offenbaren, dass Wortoperatoren fast öfter vorkommen als Zeichenoperatoren.

Wozu taugen nun ganzzahlige Divisionen? Der Operator \ wird für Divisionen verwendet, bei denen der Wert nicht bekannt ist (etwa bei Benutzereingaben), der Rückgabewert aber auf jeden Fall ganzzahlig sein muss. Der Operator Mod wird z.B. verwendet, wenn auf Teiler oder Vielfache von Zahlen getestet werden soll. Im folgenden Beispiel ist y gleich 0, wenn der Wert der Variable x ein Vielfaches von 3 ist. Sie können das Beispiel ausprobieren, indem Sie y ausgeben lassen und x im Code ändern. Deshalb steht x hier auch nicht unter „Output“.

  Code:  

Dim x As Integer = 6
Dim y As Integer = x Mod 3

  Ausgabe:  

y = 0