Verzweigungen und Fallunterscheidungen

Einleitung

Oft muss ein Programm - je nach Eingabe oder berechnetem Wert - auf verschiedene Arten weiterfahren.

Ein wichtiges Mittel bei der Programmierung ist deshalb die sogenannte Verzweigung.
Bei einer Verzweigung wird der Programmcode in verschiedene Blöcke unterteilt. Je nach dem ob eine angegebene Aussage true oder false ist, wird dann der eine oder andere Codeblock ausgeführt.

Du wirst in diesem Kapitel lernen, wie man Fallunterscheidungen programmiert.

Inhalt:
Einfaches if()
if() else
logische Verknüpfungen
switch() case

Einfache Überprüfung mit if

Angenommen eine Zahl wird durch eine Zahl geteilt, die vom Benutzer eingegeben wird.

output('Divisor eingeben: '); d = input(); output('100 / d = '+String(100 / d));

Nun kann der Benutzer auch die Zahl 0 (Null) eingeben. Die Division durch Null ist aber nicht definiert. Deshalb soll das Programm die letzte Zeile nur schreiben, wenn d nicht Null ist.

output('Divisor eingeben: '); d = input(); if(d != 0) { output('100 / d = '+String(100 / d)); }

Der Programmcode zwischen den geschwungenen Klammern wird nur dann ausgeführt, wenn die Aussage nach dem if true ist.

Die allgemeine Notation für den if-Befehl ist:

if(Aussage) { //Code }

Wenn nur eine Codezeile folgt, könnten die geschwungenen Klammern weggelassen werden. Dies ist aber nicht zu empfehlen. Wenn man nämlich später Code einfügen muss, vergisst man leicht die Klammern zu setzen, wass zu Fehlern führt.

Zu jeder öffnenden Klammer muss es auch eine schliessende Klammer geben! Beachte auch die Einrückung. Sie hilft den Code besser zu verstehen.
Siehe Programmiertipps

Verzweigung mit if() else

Im vorherigen Beispiel passierte einfach gar nichts, wenn der Benutzer Null eingibt. Das ist nicht ideal!

Man kann nach dem if-Codeblock einen weiteren Block anfügen, der dann ausgeführt wird, wenn die Aussage nach dem if false ist. Dieser zweite Codeblock wird durch das Wort else eingeleitet und muss auch zwischen geschwungenen Klammern stehen.

output('Divisor eingeben: '); d = input(); if(d != 0) { output('100 / d = '+String(100 / d)); } else { alert('Division durch Null ist nicht erlaubt'); }
else kann nur nach einem if stehen!
Zu jeder öffnenden Klammer muss es auch eine schliessende Klammer geben! Beachte auch die Einrückung. Sie hilft den Code besser zu verstehen.
Siehe Programmiertipps

Fallunterscheidungen mit if() else if() else

Oft muss das Programm auch mehrere Fälle unterscheiden. Dann spricht man nicht mehr von einer Verzweigung, sondern von einer Fallunterscheidung.

Eine Fallunterscheidung erhält man, wenn man gleich hinter dem else eine weitere if-Abfrage einfügt.

output('Divisor eingeben: '); d = input(); if(d == 1) { //wird ausgeführt, wenn d==1 output('100 / d = '+d+' (Das geht auch im Kopf!)'); } else if(d != 0) { //wird ausgeführt, wenn d nicht 1 und nicht 0 ist output('100 / d = '+String(100 / d)); } else { //wird sonst, also wenn d==0 ist, ausgeführt alert('Division durch Null ist nicht erlaubt'); }

Es können auch mehrere else if-Blöcke eingefügt werden.
Eine Fallunterscheidung ist schon ziemlich kompliziert. Man muss sich beim Programmieren genau überlegen, in welcher Reihenfolge die Blöcke stehen sollen!

Wurde ein Block ausgeführt, springt das Programm automatisch ans Ende des ganzen if-else-Gefüges.

Mehrfachaussagen

Wie du im Kapitel über Vergleichsoperatoren gelernt hast, lassen sich mehrere Vergleiche mit dem &&- oder dem ||-Operator koppeln.
So lassen sich in einer Verzweigung oder einer Fallunterscheidung mehrere Aussagen gleichzeitig überprüfen.

output('Divisor eingeben (oder q für Abbruch): '); d = input(); if((d != 0) && (d != 'q')) { output('100 / d = '+String(100 / d)); } else if((d == 0) && (d != 'q')) { alert('Division durch Null ist nicht erlaubt'); }

Das sieht alles schon ziemlich kompliziert aus. Wenn man sich aber ein bisschen Zeit nimmt, versteht man auch diesen Code!

Fallunterscheidung mit switch() case:

Wenn man in einer Fallunterscheidung nur eine Variable auf mehrere mögliche Werte hin überprüfen muss, kann man dies - viel einfacher als mit if() else - mit switch() case: machen.

output('Gib eine Zahl von 0 bis 2 ein!'); Eingabe=input(); switch(Eingabe) { case '0': output('Selber eine Null!'); break; case '1': output('Oh! Wie bescheiden!'); break; case '2': output('Ein Zweibeiner!'); break; default: output('Ein hoffnungsloser Fall!'); }

Die Fallunterscheidung wird durch das Schlüsselwort switch eingeleitet. In der Klammer hinter switch steht die Variable, deren Wert untersucht werden soll.
Dann folgt in geschweiften Klammern die eigentliche Fallunterscheidung. Die einzelnen Fälle werden alle mit case eingeleitet. Trifft keiner der angegebenen Fälle zu, wird default ausgeführt.

Wichtig ist auch der Befehl break;. Er markiert das Ende eines Falles und veranlasst das Programm, den switch-Block zu verlassen (also nach der schliessenden geschweiften Klammer fortzufahren). Fehlt break;, werden auch die folgenden Fälle ausgeführt, was man ja meistens nicht will.

Soll für mehrere Fälle der selbe Code ausgeführt werden, kann man mehrere case-Elemente untereinander schreiben:

output('Gib eine Zahl von 0 bis 3 ein!'); Eingabe=input(); switch(Eingabe) { case '0': output('Selber eine Null!'); break; case '1': case '2': case '3': output('Eins, zwei oder drei...'); break; default: output('Ein hoffnungsloser Fall!'); }
Achte darauf, dass die Doppelpunkte, Strichpunkte und Klammern alle richtig gesetzt sind - sonst geht gar nichts!