Bedingungen


Manchmal möchte man einen Teil des Codes nur ausführen, wenn eine bestimmte Bedingung erfüllt ist. Zum Beispiel soll der Hamster nur vorwärtsgehen, wenn er nicht vor einer Mauer steht oder nur dann ein Korn ablegen, wenn sein Maul nicht leer ist. Dafür benötigt man sogenannte boolesche Ausdrücke, die einen Wahrheitswert, also true (wahr) oder false (falsch) liefern. Der Hamster kennt bereits die folgenden Befehle, die helfen, Laufzeitfehler zu vermeiden:

   kornDa()           liefert als Rückgabewert „true“, wenn mindestens ein Korn im Feld liegt, sonst „false“

   maulLeer()       liefert als Rückgabewert „true“, wenn der Hamster kein Korn herumträgt, sonst „false“

   vornFrei()         liefert als Rückgabewert „true“, wenn der Hamster vor sich ein freies Feld hat, sonst „false“

 

if / else

Mit der if-Anweisung kann man nun festlegen, welche Anweisungen ausgeführt werden, wenn die geprüfte Bedingung wahr ist. Mehrere Befehle werden mit geschweiften Klammern zusammengefasst. Im else-Zweig stehen die Anweisungen, die bei „false“ ausgeführt werden. Den else-Zweig kann man auch weglassen.

Im folgenden Beispiel siehst Du:
Gelb markiert ist die Bedingung. Ist sie „wahr“, wird der grüne Teil ausgeführt. Wenn sie nicht „wahr“(also „false„) ist, wird der blaue Teil ausgeführt.

if (vornFrei()) {
    vor();
}
else {
    linksUm();
}

 

Rückgabewerte

Stell Dir vor, Deine Prozedur ist „5 + 5″ und Du schreibst
X = 5 + 5;
Dann wird die Variable X mit dem Wert 10 befüllt. 10 ist der Rückgabewert der Funktion.

In unserer If-Anweisung sieht das dann so aus:
Nachdem die Bedingung „vornFrei()“ ausgewertet wurde, gibt sie einen Rückgabewert zurück, der dann in den Klammern nach dem if steht:

if (true) { …
oder
if (false) { …

In den Klammern nach einem „if“ darf nur etwas stehen, das im Endeffekt zu „true“ oder „false“ wird. Beispielsweise eine der drei oben genannte Bedingungen, oder eine Prozedur, welche Du selbst erstellt hast und welche einen Wert „true“ oder „false“ zurückgibt!
Eine solche Prozedur zu erstellen, wirst Du im Laufe der Hamster-Termine lernen.

 

If im If

Da eine if-Anweisung ebenfalls eine Anweisung ist, kann sie in einer if-Anweisungen stehen.

if (vornFrei()) {
    if (kornDa()) {

        nimm();

    }
    vor();
}

 

Weitere if-Anweisungen im else-Zweig werden nicht eingerückt.

if (maulLeer()) {
    …
} else if (kornDa()) {
    …
} else if (vornFrei()) {
    …
} else {

   
}

 

! – && – ||

Der Operator ! steht für die Negation eines boolschen Ausdrucks a. Liefert dieser „true“, dann hat !a den Wahrheitswert „false“. Hat a den Wahrheitswert „false“, dann hat a den Wert „true“.

!maulLeer() liefert true, wenn das Maul des Hamster nicht leer ist, sonst false

Mit dem Operator && (Konjunktion) werden zwei boolsche Ausdrücke a und b konjugiert: a && b liefert nur dann true, wenn beide Ausdrücke a und b den Wahrheitswert true liefern, sonst false. Wenn bereits a false liefert, wird b nicht ausgewertet, da das Ergebnis schon feststeht.

if (vornFrei() && kornDa()) {

    nimm();
    vor();
}

Mit dem Operator || (Disjunktion) werden zwei boolsche Ausdrücke a und b disjungiert: a || b liefert true, wenn mindestens einer der beiden Ausdrücke a und b den Wahrheitswert true liefern. Liefern beide false, dann liefert auch a || b false. Wenn bereits a true liefert, wird b nicht ausgewertet, da das Ergebnis schon feststeht.

Werden mehrere Operatoren gleichzeitig verwendet, dann wird zuerst ! ausgewertet, danach && und zum Schluss ||. Diese Reihenfolge kann durch Klammern verändert werden: a && (b || c) wertet zuerst b || c aus. Das Ergebnis wird dann mit a konjugiert.