JAVA Folge 7 Boolesche Funktionen Testbefehle V Folge 7 Boolesche Funktionen... · JAVA Folge 7 -...

4

Click here to load reader

Transcript of JAVA Folge 7 Boolesche Funktionen Testbefehle V Folge 7 Boolesche Funktionen... · JAVA Folge 7 -...

Page 1: JAVA Folge 7 Boolesche Funktionen Testbefehle V Folge 7 Boolesche Funktionen... · JAVA Folge 7 - Boolesche Funktionen (Testbefehle)V.2.doc 1/4 Folge 7 Boolesche Funktionen JAVA (Make

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.

Page 2: JAVA Folge 7 Boolesche Funktionen Testbefehle V Folge 7 Boolesche Funktionen... · JAVA Folge 7 - Boolesche Funktionen (Testbefehle)V.2.doc 1/4 Folge 7 Boolesche Funktionen JAVA (Make

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();

}

Page 3: JAVA Folge 7 Boolesche Funktionen Testbefehle V Folge 7 Boolesche Funktionen... · JAVA Folge 7 - Boolesche Funktionen (Testbefehle)V.2.doc 1/4 Folge 7 Boolesche Funktionen JAVA (Make

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(); }

Page 4: JAVA Folge 7 Boolesche Funktionen Testbefehle V Folge 7 Boolesche Funktionen... · JAVA Folge 7 - Boolesche Funktionen (Testbefehle)V.2.doc 1/4 Folge 7 Boolesche Funktionen JAVA (Make

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;

}

}