Wikipedia · einfach zusammengefasst · Stand
Bedingte Anweisung und Verzweigung
Eine bedingte Anweisung ist eine Kontrollstruktur in der Programmierung. Ein Programmabschnitt wird dabei nur unter einer bestimmten Bedingung ausgeführt.
Inhalt6 Abschnitte
Grundidee
Eine bedingte Anweisung ist eine Kontrollstruktur in der Programmierung. Sie sorgt dafür, dass ein Programmabschnitt nur unter einer bestimmten Bedingung ausgeführt wird. Eine Verzweigung legt fest, welcher von zwei oder mehreren Programmabschnitten ausgeführt wird. Die Auswahl hängt von einer oder mehreren Bedingungen ab.
Solche Konstrukte sind wichtig, weil Programme damit auf unterschiedliche Situationen reagieren können: Ein bestimmter Code wird nur ausgeführt, wenn eine Aussage gerade wahr ist; andernfalls wird er übersprungen oder ein anderer Codeabschnitt ausgeführt.
Bedingte Anweisung
Eine bedingte Anweisung besteht aus einer Bedingung und einem Codeabschnitt mit einer oder mehreren Anweisungen. Wenn der Programmablauf diese Stelle erreicht, wird zuerst die Bedingung ausgewertet. Trifft sie zu, wird der Codeabschnitt ausgeführt. Trifft sie nicht zu, wird er übersprungen. Danach läuft das Programm mit den folgenden Anweisungen weiter.
In Pseudocode hat eine bedingte Anweisung die Form:
falls Bedingung dann Anweisung(en) ende
Die Bedingung ist ein Ausdruck, der nach den Regeln der jeweiligen Programmiersprache ausgewertet wird. Dazu gehören Semantik und Vorrangfolge der Operatoren. Das Ergebnis muss ein Wahrheitswert sein: wahr, wenn die Bedingung zutrifft, oder falsch, wenn sie nicht zutrifft. In manchen Sprachen darf das Ergebnis auch nach den Umwandlungsregeln der Sprache implizit in einen Wahrheitswert umwandelbar sein.
Eine Bedingung ist zeitabhängig. Sie wird jedes Mal neu ausgewertet, wenn der Programmablauf die bedingte Anweisung erreicht. Deshalb kann dieselbe Bedingung bei mehreren Durchläufen einmal wahr und ein anderes Mal falsch sein.
Beispiel in C-ähnlicher Syntax, etwa in C++, C# oder Java:
if (Temperatur < 20) Heizung_Einschalten();
Ist der Wert Temperatur kleiner als 20, wird Heizung_Einschalten() ausgeführt. Ist Temperatur nicht kleiner als 20, wird diese Anweisung übersprungen. In SQL zeigt DELETE FROM tabelle WHERE tabelle.id = 42; ein ähnliches Prinzip: Alle Tabelleneinträge, für die id = 42 gilt, werden gelöscht; die übrigen bleiben unberührt.
Einfache Verzweigung
Eine Verzweigung, auch Auswahl oder Selektion genannt, besteht aus einer Bedingung und zwei Codeabschnitten. Zuerst wird die Bedingung ausgewertet. Wenn sie zutrifft, wird der erste Codeabschnitt ausgeführt. Andernfalls wird der zweite Codeabschnitt ausgeführt.
In Pseudocode lautet die Form:
falls Bedingung dann Anweisung(en) sonst Anweisung(en) ende
Beispiel in C:
if (Temperatur < 20) Heizung_Einschalten(); else Heizung_Ausschalten();
Hier wird bei einer Temperatur unter 20 die Heizung eingeschaltet. Wenn die Bedingung nicht erfüllt ist, wird stattdessen die Heizung ausgeschaltet.
Auswahloperator
In manchen Programmiersprachen gibt es einen ternären Auswahloperator. Er wird auch bedingter Ausdruck oder Konditionaloperator genannt. „Ternär“ bedeutet hier, dass der Operator drei Bestandteile verarbeitet: eine Bedingung, einen Ausdruck für den Fall wahr und einen Ausdruck für den Fall falsch.
Die Form entspricht: wenn Bedingung dann Ausdruck1 sonst Ausdruck2. Zuerst wird die Bedingung ausgewertet. Ist sie wahr, wird Ausdruck1 ausgewertet. Ist sie falsch, wird Ausdruck2 ausgewertet. Das Ergebnis dieses ausgewerteten Ausdrucks ist zugleich das Ergebnis des Auswahloperators.
In C kann derselbe Vorgang als if-else-Konstrukt oder mit Auswahloperator geschrieben werden:
if (zahl==5) str1 = "Zahl gleich 5"; else str1 = "Zahl ungleich 5";
const char* str2 = zahl==5 ? "Zahl gleich 5" : "Zahl ungleich 5";
Der Auswahloperator kann auch bei der Initialisierung einer immutablen Variable verwendet werden, was mit if-else in dieser Form nicht möglich ist. In vielen Sprachen wird derselbe Gedanke mit if-then-else formuliert, zum Beispiel in F#: let x = if zahl < 5 then 0 else 1.
Mehrfache Verzweigungen
Viele Programmiersprachen kennen mehrfache Verzweigungen, auch Fallunterscheidungen genannt. Dabei gibt es zwei grundlegende Formen.
In der ersten Form bestimmt das Ergebnis eines Ausdrucks, welcher von mehreren Codeabschnitten ausgeführt wird und ob überhaupt einer davon ausgeführt wird. In der zweiten Form gibt es mehrere Bedingungen, denen jeweils ein Codeabschnitt zugeordnet ist. In beiden Formen kann ein else-Teil vorhanden sein. Dieser else-Teil wird verwendet, wenn keine der vorher vorgesehenen Möglichkeiten passt.
Zwei Formen der Fallunterscheidung
Bei der ersten Form wird ein Ausdruck ausgewertet und mit angegebenen Werten verglichen. Bei Übereinstimmung werden die Anweisungen zu diesem Wert ausgeführt. Wenn kein Wert übereinstimmt, werden die Anweisungen nach sonst ausgeführt, sofern ein else-Teil vorhanden ist. In C wird dafür zum Beispiel switch verwendet. Dort kann break nötig sein, damit nicht auch die folgenden Anweisungen ausgeführt werden. Ein C#-Beispiel prüft anhand von date.Month, ob ein Datum in spring, summer, autumn oder winter liegt; bei keinem passenden Wert wird invalid date gesetzt.
Die genaue Semantik solcher Konstrukte hängt stark von der Programmiersprache ab. Der else-Teil ist nicht immer erlaubt, manchmal aber verpflichtend. In manchen Sprachen kann es zu einem Laufzeitfehler kommen, wenn der else-Teil fehlt und der Ausdruck keinen angegebenen Wert annimmt.
Bei der zweiten Form werden mehrere Bedingungen der Reihe nach geprüft. Sobald eine Bedingung zutrifft, wird der zugehörige Codeabschnitt ausgeführt, und die mehrfache Verzweigung ist beendet. Wenn keine Bedingung zutrifft, wird der else-Teil ausgeführt, falls er vorhanden ist. Technisch ist dies in den meisten Sprachen kein eigenes Konstrukt, sondern eine Verkettung von Verzweigungen: Jede Verzweigung außer der ersten steht im else-Teil der vorherigen Verzweigung. Ein C#-Beispiel prüft so, ob ein Zeitpunkt vor einem Zeitraum, nach einem Zeitraum oder innerhalb eines Zeitraums liegt.