Fallunterscheidungen: if - else, else if und switch

Bis jetzt wurde ein Programm als eine Abarbeitung von Anweisungen betrachtet. Bei komplexeren Programmen geht es jedoch um viel mehr. Es müssen oftmals unterschiedliche Wege eingeschlagen werden, oder bestimmte Code-Abschnitte öfters durchlaufen werden.

 

Wenn-Dann Abfragen werden mit if-else oder switch Konstrukten durchgeführt. Durch sie können verschiedene Wege bei der Abarbeitung eines Programms eingeschlagen werden.

 

if - else: Auswahl zwischen zwei Möglichkeiten

Mit if - else kann genau zwischen zwei Möglichkeiten unterschieden werden. Wenn (if) die Bedingung erfüllt ist, dann wird der dazugehörige Anweisungsblock ausgeführt. Wenn diese nicht erfüllt ist, wird der alternative Anweisungsblock (else) ausgeführt. Der else-Zweig kann auch weggelassen werden, wenn es keine alternativen Anweisungen gibt.

 

 

Fallbeispiel 1: Das unten stehende Programm überprüft, ob eine eingegebene Zahl größer oder kleiner als 50 ist. Folgender Weg (rechtes Teilbild) wird eingeschlagen:

 

 

 


 

if - else: Abfrage von beliebig verschiedenen Möglichkeiten durch Schachtelung

Sollen mehrere Fälle berücksichtigt werden, also Bereichsabfragen durchgeführt werden, so muss die if - else Abfrage geschachtelt werden. Dazu wird in der else Bedingung eine weitere if Bedingung eingefügt:

 

 

 

Fallbeispiel 2: Das unten stehende Programm gibt aus, ob eine Zahl im Bereich zwischen 0 bis 50, 50 bis 100 liegt bzw. größer als 100 ist. Es gibt also drei Fälle, die mit einer verschachtelten if - else Abfrage überprüft werden.

 

Bei der verschachtelten if - else Anweisung gibt es nur genau einen Pfad durch die Bedingungen. Ist zum Beispiel die erste if Bedingung schon erfüllt, so kann niemals die zweite if-Bedingung ausgewertet werden, egal ob diese auch erfüllt ist oder nicht. Die hier angegebene ausführliche Schreibweise zeigt den verschachtelten Charakter der if - else Abfragen. Diese ausführliche Schreibweise wird jedoch nur ganz selten verwendet.

 


 

if - else if: Die andere (kürzere) Schreibweise der verschachtelten if - else Abfrage


Eine Abkürzung für verschachtelte if-else Anweisungen ist die if - else if Anweisung. Verwenden Sie bevorzugt diese abgekürzte Schreibweise (das Prinzip ist aber genau gleich)! Sie ist übersichtlicher und benötigt nicht so viele Einrückungen. Der einzige Unterschied ist, dass in der abgekürzten Schreibweise die verschachtelte if-Bedingung direkt hinter das else geschrieben wird.

 

 

Es können beliebig viele else-if Bedingungen hinzugefügt werden. Die letzte else-Bedingung wird nur betreten, wenn vorher alle else-if Bedingungen nicht erfüllt sind. Bei der abgekürzten Schreibweise ist die Verschachtelung nicht so gut erkennbar, sie ist aber trotzdem vorhanden.

 

Fallbeispiel 3: Das unten stehende Programm dient zur Steuerung einer Heizung. Die aktuelle Raumtemperatur wird mit der Funktion getTemp() abgefragt und in der Variable temp gespeichert.

  • Die Heizung soll erst eingeschaltet werden, wenn die Temperatur über 5 °C beträgt, da sie bei zu niedrigen Temperaturen nicht funktioniert.
  • Wenn die Temperatur über 5 °C steigt, soll die Heizung eingeschaltet werden.
  • Wenn die Temperatur größer als 25 °C ist, soll sie ausgeschaltet werden, da der Raum sonst zu warm wird.

 

Beträgt die Temperatur nun temp = 26 Grad, so ist die erste if-Bedingung bereits erfüllt (26 > 5 -> TRUE). Aufgrund der Verschachtelung wird die zweite if-Bedingung (d.h. das else if) nie erreicht und die Heizung bleibt eingeschaltet. Der Raum wird weiter erwärmt (rechtes Teilbild). Eine derartiger Fehler kann bei manchen Fragestellungen zu schwerwiegenden Problemen führen. Um das Problem zu vermeiden muss der Temperaturbereich genauer eingeschränkt werden:

if (temp > 5 && temp <= 25)

...

else if (temp > 25)
...

Die erste if-Bediungung wird jetzt nur betreten, wenn die Temperatur zwischen 5 und 25 °C liegt. Ist temp = 26 wird der ursprünglich geplante Verlauf ausgeführt und die Heizung wird korrekt abgeschaltet.

 

 


 

Wertunterscheidungen mit switch

Bei Fallunterscheidungen mit if können beliebig viele und auch komplexe Bedingungen abgefragt werden. Die Bedingungen werden dann mit logischen Operatoren verknüpft. In Fallbeispiel 2 wird beispielsweise ein Bereich mit if abgefragt:

if (zahl > 0 && zahl <= 50)

...

Switch Abfragen hingegen sind schnelle überischtliche Abfragen, die nur eine Bedingung prüfen können. Die Switch-Anweisung wird auch als Fallauswahl bezeichnet. Das folgende Bild zeigt das Prinzip und die Darstellung einer Switch-Abfrage:

  • Hinter jedem Auswahlfall (case) steht der Code, der ausgeführt wird, wenn die Variable wert einen der Zahlenwerte annimmt.
  • Am Ende jeder Auswahlmöglichkeit muss in den meisten Fällen ein break stehen. Das Schlüsslwort break bewirkt, dass nach der Ausführung des Codes die Switch-Abfrage beendet und verlassen wird.
  • Wenn kein Fall zutrifft, wird der Code hinter default ausgeführt. Das default-Fall kann auch weggelassen werden. Dann wird nichts ausgeführt, wenn kein Fall zutrifft.

 

Positive Merkmale der Switch-Abfrage sind:

  • übersichtlicher Code ohne Verschachtelung
  • schneller als if - Abfragen

Dafür gibt es aber auch einige Einschränkungen:

  • nur ganzzahlige Werte können abgefragt werden
  • nur eine einzige Bedingung kann abgefragt werden
  • keine >, <, … Vergleiche

 

Fallbeispiel 4: Das folgende Programm liest eine Zahl von der Konsole ein. Mit einer Switch-Abfrage wird ermittelt, welche Zahl eingelesen wurde. Als Ausgabe erscheint dann ein Satz, welche Zahl eingegeben wurde.