Die If-Anweisung dient dazu, in Abhängigkeit von einer Bedingung entweder das eine Programmstück oder das andere Programmstück auszuführen.
Die If-Anweisung hat die allgemeine Form
if (bedingung) |
{ |
anweisung1; |
anweisungm; |
} |
else |
{ |
anweisungm+1; |
anweisungn; |
} |
Bei bedingung muss es sich um einen Ausdruck handeln, der einen Wert vom Typ boolean, also true oder false, ergibt. Die Bedingung steht in runden Klammern hinter dem Wort if (engl.: if – wenn, falls).
Danach folgt in geschweiften Klammern der If-Teil, also das Programmstück, das ausgeführt werden soll, wenn die Bedingung erfüllt ist, hier dargestellt durch die Anweisungen anweisung1, ..., anweisungm. Jede Anweisung wird mit einem Semikolon abgeschlossen.
Danach folgt das Wort else und dann, wiederum in geschweiften Klammern, der Else-Teil, also das Programmstück, das ausgeführt werden soll, wenn die Bedingung nicht erfüllt ist, hier dargestellt durch die Anweisungen anweisungm+1, ..., anweisungn (engl.: else – sonst, anderenfalls).
Bei Ausführung der If-Anweisung wird zunächst geprüft, ob die Bedingung erfüllt ist, d.h. ob sie den Wert true ergibt. Ist dies der Fall, so wird der If-Teil ausgeführt, also die unmittelbar folgenden Anweisungen. Danach wird hinter dem Else-Teil fortgefahren.
Ist die Bedingung nicht erfüllt, so wird der If-Teil übersprungen und der Else-Teil ausgeführt, also die auf das Wort else folgenden Anweisungen.
Beispiel: In folgendem Programmstück wird das Maximum der beiden Werte der Variablen a und b ermittelt und der Variablen max zugewiesen.
Vorausgesetzt ist hier, dass die beiden Variablen a und b Werte haben. Es wird geprüft, ob der Wert von a größer als der Wert von b ist. Wenn dies der Fall ist, so wird der Wert von a der Variablen max zugewiesen. Wenn der Wert von a kleiner oder gleich dem Wert von b ist, so wird der Wert von b der Variablen max zugewiesen. Am Ende hat also die Variable max in jedem Fall den Wert des Maximums von a und b.
Der Programmablauf einer If-Anweisung lässt sich mit Hilfe eines Flussdiagramms veranschaulichen. Das Flussdiagramm für das obige Beispielprogramm ist in Bild 1 dargestellt.
Bild 1: Flussdiagramm des Beispielprogramms (If-Anweisung)
Oft ist folgende Situation gegeben: Ein Programmstück soll ausgeführt werden, falls eine bestimmte Bedingung erfüllt ist, anderenfalls aber soll fortgefahren werden, ohne dass etwas getan wird. Dies kann durch eine If-Anweisung mit leerem Else-Teil programmiert werden. Es ist dann auch zulässig, das Wort else und den leeren Else-Teil wegzulassen.
Beispiel: In folgendem Programmstück zur Berechnung des Maximums wird der Variablen max zunächst "auf Verdacht" der Wert von b zugewiesen. Nur wenn der Wert von a größer sein sollte, wird die Zuweisung korrigiert, indem der Variablen max der Wert von a zugewiesen wird. Wenn der Wert von a aber nicht größer ist, braucht nichts getan zu werden, denn die ursprüngliche Zuweisung war richtig. Ein Else-Teil ist also nicht erforderlich.
Links steht das entsprechende Programm mit leerem Else-Teil, rechts das gleiche Programm mit weggelassenem Else-Teil.
max = b;
if (a > b) { max = a; } else { } |
max = b;
if (a > b) { max = a; } |
Wenn ein Anweisungsteil, also der If-Teil oder der Else-Teil, nur aus einer einzigen Anweisung besteht, können die geschweiften Klammern weggelassen werden. In obigen Beispielen war dies der Fall; die beiden unterschiedlichen Programmversionen zur Berechnung des Maximums lassen sich also kürzer folgendermaßen schreiben:
if (a > b)
max = a; else max = b; |
max = b;
if (a > b) max = a; |
Der If- oder der Else-Teil einer If-Anweisung kann wiederum aus einer If-Anweisung bestehen.
Beispiel: Folgendes Programm berechnet das Signum einer Zahl x. Das Signum ist 1, wenn die Zahl positiv ist, -1, wenn sie negativ ist, und 0 wenn sie gleich 0 ist.
Hier besteht der If-Teil der ersten If-Anweisung wiederum aus einer If-Anweisung. Geschweifte Klammern sind nicht nötig, da eine If-Anweisung einschließlich If- und Else-Teil als eine Anweisung zählt.
Probleme kann es bei geschachtelten If-Anweisungen geben, wenn geschweifte Klammern um eine If-Anweisung ohne Else-Teil weggelassen werden.
Beispiel: Folgende Programmversion zur Berechnung des Signums funktioniert nicht korrekt. Gedacht war hier ein Bezug des else auf das erste if, wie durch die Einrückung des Programmtextes angedeutet. Tatsächlich aber bezieht sich else immer auf das letzte if, das noch auf ein mögliches else wartet.
Damit das Programm korrekt funktioniert, muss if (x == 0) signum = 0; in geschweifte Klammern gesetzt werden. Damit ist diese If-Anweisung für sich abgeschlossen, wartet also nicht mehr auf else.
Weiter mit: [Programmschleifen] oder [up]