JAVA Folge 7 Boolesche Funktionen Testbefehle V Folge 7 Boolesche Funktionen... · JAVA Folge 7 -...
Click here to load reader
Transcript of JAVA Folge 7 Boolesche Funktionen Testbefehle V Folge 7 Boolesche Funktionen... · JAVA Folge 7 -...
JAVA Folge 7 - Boolesche Funktionen (Testbefehle)V.2.doc 1/4
Folge 7 Boolesche Funktionen JAVA (Make your own Testbefehl)
Bisher gibt es nur drei Testbefehle vornFrei(), kornDa(), maulLeer() . In
dieser Folge werden Sie lernen, den Vorrat an Testbefehlen zu erweitern. Wer hat sich nicht schon den Testbefehl linksFrei() statt immer nur vornFrei() gewünscht!
Leider gibt es ihn nicht. Noch nicht!
7.1 Boolesche Funktionen
Mit Hilfe der booleschen Funktionen können wir neue Testbefehle definieren. Hierfür benötigen wir zwei Schlüsselwörter aus JAVA: boolean und return .
boolean
Mit dem Schlüsselwort boolean definieren wir den neuen Testbefehl. Das
Schlüsselwort boolean ist dabei für zwei Dinge gleichzeitig verantwortlich:
1. Es definiert den Namen.
2. Es legt fest, dass die neue Funktion vom Typ boolean ist.
return
Als nächstes müssen wir noch definieren, welcher boolesche Wert wann zurückmeldet wird. Dafür sorgt das Schlüsselwort return.
1. Es meldet den booleschen Wert (true oder false) zurück.
2. Es ist für den Rücksprung in das Hauptprogramm verantwortlich.
7.2 Syntax der boolean-Funktion
Dem Schlüsselwort boolean folgt ein Name und die beiden Klammern.
Syntaxdiagramm: boolean-Funktion
7.3 Syntax der return-Anweisung
Dem Schlüsselwort return folgt ein boolescher Ausdruck und ein abschließendes
Semikolon.
Syntaxdiagramm: return-Anweisung
return ; boolescher
Ausdruck
boolean ( Name )
Semikolon nicht vergessen.
JAVA Folge 7 - Boolesche Funktionen (Testbefehle)V.2.doc 2/4
boolean mauerDa()
{
return !vornFrei();
}
7.4 Beispiele
Beispiel: mauerDa()
Wir wollen einen neuen Testbefehl: mauerDa() definieren der uns
Auskunft darüber gibt, ob vor dem Hamster eine Mauer ist. Dies entspricht eigentlich dem booleschen Ausdruck: !vornFrei() .
Und so geht’s:
Mit boolean wird die neue boolesche Funktion
mit dem Namen mauerDa() definiert.
Mit der return-Anweisung legen wir fest
welcher boolesche Wert zurückgemeldet wird.
In diesem Beispiel dient die Negation des bereits
existierenden Testbefehl vornFrei() als Lieferant
für das Ergebnis: true oder false.
Beispiel: linksFrei()
Wir definieren den neuen Testbefehl: linksFrei() . Wie sein Name schon sagt, soll
der neue Testbefehl feststellen, ob auf der Kachel links neben dem Hamster keine
Mauer ist.
Mit boolean wird die neue boolesche Funktion mit dem Namen
linksFrei() definiert.
Hamster dreht sich nach links.
Wenn vornFrei() den Wert: true ergibt, wird die if-Anweisung
ausgeführt.
rechtsUm() dreht den Hamster wieder in seine
Ausgangsposition zurück. So als ob nichts geschehen wäre.
Die return-Anweisung meldet: true zurück und an dieser Stelle
wird die neue linksFrei()-Funktion verlassen.
Rücksprung in das Hauptprogramm.
Wenn vornFrei() den Wert: false ergibt, wird die if-
Anweisung nicht ausgeführt, sondern die else-Anweisung.
rechtsUm() dreht den Hamster wieder in seine
Ausgangsposition zurück. So als ob nichts geschehen wäre.
Die return-Anweisung meldet: false zurück und an dieser Stelle
wird die neue linksFrei()-Funktion verlassen.
Rücksprung in das Hauptprogramm.
boolean linksFrei()
{
linksUm();
if (vornFrei())
{
rechtsUm();
return true;
}
else
{
rechtsUm();
return false;
}
} void rechtsUm()
{
linksUm();
linksUm();
linksUm();
}
JAVA Folge 7 - Boolesche Funktionen (Testbefehle)V.2.doc 3/4
Achtung: So funktioniert es nicht! Warum? Was ist der Unterschied?
Programmieren Sie die beiden booleschen Funktionen. Was meldet Ihnen der
Compiler zurück wenn Sie die return-Anweisung zuerst verwenden?
Beispiel: hintenFreiUndKorn()
Wir definieren den neuen Testbefehl: hintenFreiUndKorn() . Der neue Testbefehl
soll feststellen, ob hinter dem Hamster keine Mauer ist und ob der Hamster noch ein
Korn im Maul hat.
Mit boolean wird die neue boolesche
Funktion mit dem Namen
hintenFreiUndKorn() definiert.
Hamster wendet um 180°.
Wenn vornFrei() den Wert: true ergibt,
UND die NEGATION von maulLeer() auch
den Wert : true ergibt, nur dann wird die if-
Anweisung ausgeführt.
Kehrt() wendet den Hamster wieder in
seine Ausgangsposition zurück. So als ob
nichts geschehen wäre. Die return-
Anweisung meldet: true zurück und an dieser
Stelle wird die neue hintenFreiUndKorn()-
Funktion verlassen. Rücksprung in das
Hauptprogramm.
Die else-Anweisung ist wieder für den Wert:
false zuständig. Siehe Beispiel: linksFrei().
boolean linksFrei()
{
linksUm();
if (vornFrei())
{
return true;
rechtsUm();
}
else
{
return false;
rechtsUm();
}
}
In dem if und in dem else Block wurden die
return-Anweisung und die rechtsUm-
Anweisung in der Reihenfolge getauscht.
Die return-Anweisung kommt jetzt zuerst.
Na und !?
Die return-Anweisung nimmt ihren Namen
sehr wörtlich, d.h. sie springt sofort in das
Hauptprogramm zurück. Die Anweisung
rechtsUm() würde nie ausgeführt werden.
boolean hintenFreiUndKorn()
{
kehrt();
if (vornFrei() && !maulLeer())
{
kehrt();
return true;
}
else
{
kehrt();
return false;
}
}
void kehrt()
{ linksUm(); linksUm(); }
JAVA Folge 7 - Boolesche Funktionen (Testbefehle)V.2.doc 4/4
7.5 (Vorsicht Falle) Seiteneffekte
Die drei vordefinierten Testbefehle vornFrei(), kornDa(), maulLeer() bewirken
keine Zustandsänderung des Hamsters. D.h. vornFrei() verändert weder die
Blickrichtung, noch die Position, noch die Körnerzahl im Maul des Hamsters.
Testbefehle berechnen nur einen booleschen Wert. Sonst nichts!
Das gleiche sollte für unsere selbstdefinierten Testbefehle (boolesche Funktionen)
gelten.
Der neue Testbefehl linksFrei() ließe sich auch so
definieren. Er liefert einwandfreie boolesche Werte
(true, false) zurück.
Leider wird der Hamster aber nicht wieder in seine
Ausgangsposition zurück gebracht. Dies nennt man
einen Seiteneffekt.
Also: Uffgebasst!
boolean linksFrei()
{
linksUm();
if (vornFrei())
{
return true;
}
else
{
return false;
}
}