Durch die Einführung von Variablen und Ausdrücken bekommt der Hamster ein ,,Gedächtnis`` und lernt rechnen.
Ein Datentyp repräsentiert Werte eines bestimmten Typs. Im imperativen Hamster-Modell existieren die Datentypen boolean und int . Der Datentyp boolean repräsentiert boolesche Werte, also true und false. Der Datentyp int repräsentiert ganze Zahlen zwischen -231 und 231-1.
Variablen sind Speicherbereiche (,,Behälter``), in denen Werte abgespeichert werden können. Vor ihrer Benutzung müssen sie definiert werden. Bei der Definition einer Variablen wird ihr ein Name - ein beliebiger Bezeichner - zugeordnet. Außerdem wird durch die Angabe eines Datentyp festgelegt, welche Werte die Variable speichern kann.
Die folgenden Anweisungen definieren eine Variable frei zum Speichern von booleschen Werten sowie eine Variable anzahlKoerner zum Speichern von ganzen Zahlen. Der Variablen frei wird der Initialwert false zugewiesen, der Variablen anzahl der Wert 13.
boolean frei = false; int anzahl = 13;
Ausdrücke sind spezielle Programmierkonstrukte zum Berechnen und Liefern eines Wertes. Boolesche Ausdrücke haben Sie bereits kennen gelernt. Sie liefern boolesche Werte. Zur Berechnung boolescher Ausdrücke können auch boolean-Variablen hinzugezogen werden. Enthält ein boolescher Ausdruck den Namen einer booleschen Variablen, dann wird bei der Auswertung des booleschen Ausdrucks an der entsprechenden Stelle der Wert berücksichtigt, der aktuell in der Variablen gespeichert ist.
Einen weiteren Typ von Ausdrücken stellen arithmetische Ausdrücke dar. Sie berechnen und liefern Werte vom Typ int, also ganze Zahlen. Arithmetische Ausdrücke lassen sich auf folgende Art und Weise bilden:
Mit Hilfe einer Zuweisungsanweisung - kurz auch Zuweisung genannt - können Variablen neue Werte zugewiesen werden. Die alten Werte gehen dabei verloren.
Syntaktisch wird die Zuweisung so gebildet, dass dem Namen der betroffenen Variablen das Zeichen = - der Zuweisungsoperator - und anschließend ein Ausdruck folgt. Bei booleschen Variablen muss das ein boolescher Ausdruck sein, bei int-Variablen ein arithmetischer Ausdruck.
Bei der Ausführung einer Zuweisung wird zunächst der Ausdruck ausgewertet und anschließend der berechnete Wert der Variablen auf der linken Seite des Zuweisungsoperators zugewiesen. Die Zuweisungsanweisung zahl = zahl + 1; erhöht bspw. den Wert einer int-Variablen zahl um den Wert 1.
Vergleichsausdrücke sind boolesche Ausdrücke , die zum Vergleichen arithmetischer Ausdrücke dienen. Sie liefern boolesche Werte nach folgenden Gesetzmäßigkeiten: Seien x und y zwei arithmetische Ausdrücke, dann gilt:
Die Vergleichsoperatoren sind linksassoziativ. Die Operatoren <, <=, > und >=haben eine höhere Priorität als die Operatoren == und !=. Weiterhin ist zu beachten, dass die Vergleichsoperatoren eine niedrigere Priorität besitzen als die arithmetischen Operatoren und eine höhere Priorität als der Zuweisungsoperator .
Variablen lassen sich innerhalb von Prozeduren und Funktionen definieren. In diesem Fall nennt man sie lokale Variablen . Variablen, die außerhalb von Prozeduren oder Funktionen definiert werden, heißen globale Variablen .
Als Gültigkeitsbereich einer Variablen wird der Teil eines Programmes bezeichnet, in dem eine Variable genutzt werden kann, d.h. in dem der Name einer Variablen verwendet werden darf. Der Gültigkeitsbereich einer lokalen Variablen erstreckt sich von der der Variablendefinition folgenden Anweisung bis zum Ende desselben Blockes und umschließt alle inneren Blöcke. Der Gültigkeitsbereich einer globalen Variablen umfasst das gesamte Hamster-Programm. Im Gültigkeitsbereich einer Variablen darf keine weitere Variable mit demselben Namen definiert werden.
Während der Gültigkeitsbereich einer booleschen Variablen zur Compilierzeit von Bedeutung ist, ist die Lebensdauer einer booleschen Variablen eine Größe, die zur Laufzeit Relevanz besitzt. Sie ist definiert als die Zeitspanne, während der im Hauptspeicher Speicherplatz für eine Variable reserviert ist. Es gilt dabei: Die Lebensdauer einer globalen Variablen umfasst die gesamte Ausführungszeit eines Hamster-Programms. Die Lebensdauer einer lokalen Variablen beginnt bei ihrer Definition und endet nach der vollständigen Abarbeitung des Blocks, in dem sie definiert wurde.
Im folgenden Programm läuft der Hamster bis zur nächsten Wand. Anschließend dreht er sich um und läuft zum Ausgangsfeld zurück. Die Anzahl der gelaufenen Schritte merkt er sich dabei in einer globalen Variablen anzahl.
int anzahl = 0; // globale Variable
void laufeBisZurWand() {
while (vornFrei()) {
vor();
anzahl = anzahl + 1; // Zuweisung
}
}
void laufeZurueckZumAusgangspunkt() {
while (anzahl > 0) { // Vergleichsausdruck
vor();
anzahl = anzahl - 1;
}
}
void main() {
laufeBisZurWand();
linksUm(); linksUm();
laufeZurueckZumAusgangspunkt();
}