Während Prozeduren dazu dienen, den Befehlsvorrat des Hamsters zu erweitern, dienen boolesche Funktionen dazu, neue Testbefehle einzuführen.
Boolesche return-Anweisungen werden in booleschen Funktionen zum Liefern eines booleschen Wertes benötigt.
Die Syntax der booleschen return-Anweisung ist sehr einfach: Dem Schlüsselwort return folgt ein boolescher Ausdruck und ein abschließendes Semikolon. Boolesche return-Anweisungen sind spezielle Anweisungen , die ausschließlich im Funktionsrumpf boolescher Funktionen verwendet werden dürfen.
Die Ausführung einer booleschen return-Anweisung während der Ausführung einer booleschen Funktion führt zur unmittelbaren Beendigung der Funktionsausführung. Dabei wird der Wert des booleschen Ausdrucks als so genannter Funktionswert zurückgegeben.
Die Syntax der Definition einer booleschen Funktion unterscheidet sich nur geringfügig von der Definition einer Prozedur . Statt Prozedurkopf, -name und -rumpf spricht man hier von Funktionskopf , Funktionsname und Funktionsrumpf .
Anstelle des Schlüsselwortes void bei der Definition einer Prozedur muss bei der Definition einer booleschen Funktion das Schlüsselwort boolean am Anfang des Funktionskopfes stehen.
Ganz wichtig bei der Definition boolescher Funktionen ist jedoch folgende Zusatzbedingung: In jedem möglichen Weg durch die Funktion muss eine boolesche return-Anweisung auftreten!
Boolesche Funktionen können überall dort in einem Hamster-Programm definiert werden, wo auch Prozeduren definiert werden können.
Eine boolesche Funktion darf überall dort aufgerufen werden, wo auch einer der drei vordefinierten Testbefehle aufgerufen werden darf. Der Aufruf einer booleschen Funktion gilt also als ein spezieller boolescher Ausdruck . Der Funktionsaufruf erfolgt syntaktisch durch die Angabe des Funktionsnamens gefolgt von einem runden Klammernpaar.
Wird bei der Berechnung eines booleschen Ausdrucks eine boolesche Funktion aufgerufen, so wird in deren Funktionsrumpf verzweigt und es werden die dortigen Anweisungen aufgerufen. Wird dabei eine boolesche return-Anweisung ausgeführt, so wird der Funktionsrumpf unmittelbar verlassen und an die Stelle des Funktionsaufrufs zurückgesprungen. Der von der booleschen return-Anweisung gelieferte Wert (also der Funktionswert ) wird dabei zur Berechnung des booleschen Ausdrucks weiterverwendet.
Im folgenden Programm sucht der Hamster auf der rechten Seite eine Nische. Findet er eine, begibt er sich hinein. Beim Suchen benutzt er eine boolesche Funktion rechtsFrei.
void rechtsUm() {
linksUm();
linksUm();
linksUm();
}
boolean rechtsFrei() { // Definition einer booleschen Funktion
rechtsUm();
if (vornFrei()) {
linksUm();
return true; // boolesche return-Anweisung
} else {
linksUm();
return false; // boolesche return-Anweisung
}
}
void main() {
while (vornFrei() &&
!rechtsFrei()) { // Aufruf einer booleschen Funktion
vor();
}
if (rechtsFrei()) { // Aufruf einer booleschen Funktion
rechtsUm();
vor();
}
}