Boolesche Funktionen


Mit Booleschen Funktionen kann man weitere Testfunktionen definieren. Bei Funktionen mit booleschem Rückgabewert steht „boolean“ vor dem Funktionsnamen. (Bei Prozeduren ohne Rückgabewert steht „void“ vor dem Prozedurnamen.) Boolesche Funktionen liefern mittels „return“ den passenden Typ, nämlich einen Wahrheitswert, zurück. Dabei beendet „return“ die Funktionsausführung. Diese neuen Testfunktionen können wie vorhandene Testfunktionen in if-Anweisungen oder Schleifen verwendet werden.
Im folgenden Beispiel wird eine vorhandene Testfunktion ausgewertet und mit „!“ negiert.

  • boolean: Das ist der Rückgabewert der Funktion. Er hat den Typ „boolean“. Das bedeutet, der Wert kann nur entweder „true“ oder „false“ sein.
  • keinKornDa(): So haben wir unsere Funktion genannt. Auch hier brauchen wir die () nach dem Namen. Wir möchten mit der Funktion herausfinden, ob kein Korn auf dem Boden liegt.
  • {: Eine geschweifte öffnende Klammer zeigt an, dass jetzt die Befehle folgen, welche ausgeführt werden sollen.
  • return ! kornDa(); : Hier wird es etwas kompliziert, aber wir verstehen es bestimmt 😉
    • return zeigt an, dass das was danach steht, als Rückgabewert der Prozedur zurückgegeben wird! Danach ist die Ausführung der Funktion abgeschlossen.
    • Das ! dreht den Wert, der danach kommt um (wahr wird zu falsch, und andersrum!).
    • Die Bedingung wird abgeprüft und der Rückgabewert tritt an ihre Stelle.
    • -> Blau und Lila werden zusammen also zum Gegenteil von Lila(also dem Rückgabewert der Bedingung KornDa())!
  • }: Eine geschweifte schließende Klammer beendet die Definition der Prozedur. Jetzt kannst Du sie benutzen. Das machst Du, indem Du sie wie z.B. den Befehl vor(); in deinen Programmcode einbaust.

 

boolean keinKornDa(){

    return !kornDa();

}

 

Genau ein Korn da?

Beim Testen, ob genau ein Korn vorhanden ist, muss zunächst ein Korn entfernt werden. Es ist wichtig, dieses Korn mit gib() wieder zurückzulegen, bevor mit „return“ die Funktion beendet wird, denn diese Testfunktion soll den aktuellen Zustand nicht verändern. Man sagt auch, sie soll keine „Seiteneffekte“ haben.

boolean genauEinKornDa(){
    if (kornDa()) {
        nimm();
        if (!kornDa()) {
            gib();
            return true;
        }
        gib();
    }
    return false;

}