Fallunterscheidungen und hier insbesondere if-Anweisungen, gehören in vielen Script- und Programmiersprachen zu den wichtigsten Kontrollstrukturen, mit denen ein Programmierer den Ablauf eines Scripts oder eines Programms steuern kann. Da sich der Einsatz von if-Statements bzw. von if-Anweisungen in den Sprachen C, C++, PHP und JavaScript kaum unterscheidet, möchten wir auf dieser Seite eine zusammenfassende Übersicht geben und haben die Beispiele so gewählt, so dass diese mit kleineren Änderungen in jeder der innerhalb dieses Webprojektes vorgestellten Script- und Programmiersprachen lauffähig wären.
Die einfachste Form eines if-Statements besteht aus einer Bedingung und einer Anweisung, die nur dann ausgeführt werden soll, wenn die Bedingung erfüllt wird. Von der Syntax her betrachtet kommt diese Kontrollstruktur noch ohne weitere Klammern und ohne einen Else-Zweig aus. Wobei ein Else-Zweig ohnehin nur als zusätzliche Verzweigung dienlich ist und insofern kein programmtechnischer Bedarf besteht entfallen kann.
if (Bedingung) Anweisung; else alternative Anweisung;
Bei der Auswertung der Bedingung unterscheiden sich die Sprachen geringfügig. So wird in C geprüft, ob
die Bedingung als Ergebnis einen von 0 verschiedenen Wert ergibt, der dann wie der boolesche Wert true für wahr gewertet würde
oder falls das Ergebnis 0 sein sollte, als false für unwahr.
In PHP kann hingegen die Zahl 0 das erwartete Ergebnis darstellen, wobei dieses Ergebnis von einem if-Statement zwar ebenfalls
bei einem einfachen Vergleich mit dem == Operator als false gewertet werden würde, doch mit Hilfe des === Operators kann
zusätzlich ein Typvergleich durchgeführt und geprüft werden, ob es sich um die Ziffer 0 handelt oder um den booleschen Wert
false. Ähnlich verhält es sich in JavaScript
if (Bedingung !== false) Führe Anweisung aus, falls die Bedingung kein false als Ergebnis liefert;
Sowie mehr als nur eine Anweisung ausgeführt werden soll, falls eine Bedingung erfüllt wird, müssen die einzelnen Anweisungen zu einem Anweisungsblock mit geschweiften Klammern zusammengefasst werden. Es spricht jedoch nichts dagegen, Anweisungen grundsätzlich in geschweifte Klammern zusetzen, was vor allem bei mehrere ineinander verschachtelten Fallunterscheidungen die Übersichtlichkeit verbessert, insofern die einzelnen if-Statements mit ihren Anweisungen entsprechend eingerückt werden.
if (Bedingung) { Anweisung 1; Anweisung 2; } else { alternative Anweisung; }
if-Statements können zusätzlich zu einem Else-Zweig durch Einfügung einer beliebigen Anzahl von else
if-Zweigen erweitert werden. Falls die erste Bedingung nicht zutraf, werden die vorhandenen else if-Bedingungen in der
Reihenfolge abgearbeitet, wie diese notiert wurden. Trifft eine else if-Bedingung zu, werden die nachfolgenden else
if-Bedingungen nicht mehr geprüft. Trifft weder die erste Bedingung zu, noch eine else if-Bedingung, wird die zum letzten
Else-Zweig gehörende Anweisung ausgeführt.
In PHP ist es üblich, statt die Schlüsselwörter else und if hintereinander zu notieren, dass Schlüsselwort elseif zu
verwenden. Werden keine geschweiften Klammern benutzt, ist es sogar erforderlich die letzte Variante zu wählen, um
Fehlermitteilungen zu vermeiden.
if (wert1 == wert2) { Anweisung 1; Anweisung 2; } else if (wert1 > wert2) { alternative Anweisung 1; } else if (wert1 < wert2) { alternative Anweisung 2; } else { alternative Anweisung 3; }
Das erste Beispiel kommt noch ohne in geschweifte Klammern gefasste Anweisungsblöcke
aus.
Ein Beispiel in C:
#include <stdio.h> // für printf und scanf #include <conio.h> // für getch int main() { int eingabe; int fuenfhundet = 500; printf("Eingabe: "); scanf("%d", &eingabe); printf("\r\n"); if (eingabe >= fuenfhundet) printf("%d ist gleich oder gr\x94\xe1 \ber als %d\n", eingabe, fuenfhundet); else printf("%d ist nicht gleich oder gr\x94\xe1 \ber als %d\n", eingabe, fuenfhundet); getch(); return 0; }
Beim zweiten Beispiel würde es bereits nicht mehr ohne in geschweifte Klammern gefasste
Anweisungsblöcke abgehen. Weiterhin würde ohne entsprechende Einrückungen und Kommentare sehr schnell der Überblick verloren
gehen. Nur könnten die Kommentare etwas sparsamer eingesetzt werden.
Beispiel mit Verschachtelungen in C++:
#include <iostream> using namespace std; int main() { int eingabe; int dreihundert = 300; int vierhundert = 400; int fuenfhundert = 500; cout << "Eingabe: "; cin >> eingabe; // Die Eingabe cout << endl << endl; // Eine Leerzeile cout << eingabe; // Ausgabe von Eingabe // Ist Eingabe gleich oder größer 300 und kleiner 500? if (eingabe < fuenfhundert && eingabe >= dreihundert) { /* Ausgabe der ersten Hälfte eines Teilsatzes, die zweite Hälfte des Satzes ergibt sich erst durch eine weitere Fallunterscheidung. */ cout << " ist kleiner als " << fuenfhundert; /* Falls die Bedingungen erfüllt wurden, die nächste Frage: Ist Eingabe größer als 400? */ if (eingabe > vierhundert) { cout << " und gr\x94\xe1 \ber als " << vierhundert << endl; } // Falls Eingabe kleiner 500 aber nicht größer als 400 ist else { cout << " aber nicht gr\x94\xe1 \ber als "; cout << vierhundert << endl; } } /* Falls Eingabe nicht kleiner als 500 ist: Erste Frage, ist Eingabe gleich 500? Zweite Frage, ist Eingabe größer 500? */ else if (eingabe == fuenfhundert) { cout << " ist gleich "; cout << fuenfhundert << endl; } else if (eingabe > fuenfhundert) { cout << " ist gr\x94\xe1 \ber als "; cout << fuenfhundert << endl; } // Falls Eingabe kleiner als 300 ist else { cout << " ist kleiner als " << dreihundert; cout << " und " << fuenfhundert << endl; } // Hält Fenster bis zur Bestätigung mit Enter offen cin.ignore(1,'\n'); cin.get(); return 0; }
Hinweis: Damit sich ein Konsolenfenster nicht in
Bruchteilen einer Sekunde wieder schließt, sobald ein Programm abgearbeitet ist, wurde bei den bisherigen C++ Listings cin.get
verwendet, um auf eine weitere Eingabe zu warten. Erfolgt jedoch bereits wie in den Beispielen vorher eine Eingabe, so enthält
der Eingabepuffer nicht nur die eingegebene Zahl, sondern auch \n für Newline. Dieses muss vor cin.get mit cin.ignore entfernt
werden, sonst würde cin.get dieses Zeichen als Eingabe werten und nicht wie erwartet das Konsolenfenster offen halten.
So wie hier notiert, wird jedoch nur \n entfernt und keine weiteren Zeichen.
Die vorgestellten Script- und Programmiersprachen C, C++, PHP und JavaScript unterschützen eine
alternative Syntax mit dem ternären Operator (auch Trinitäts-Operator genannt) bei Kontrollstrukturen, wobei es kaum
Unterschiede zwischen den Sprachen gibt. Den Ausdruck für die Bedingung in runde Klammern zu setzen ist nicht unbedingt
erforderlich, erhöht aber die Lesbarkeit.
Alternative Syntax in C:
#include <stdio.h> #include <conio.h> int main() { int eingabe; int ausgabe; printf("Eingabe: "); scanf("%d", &eingabe); printf("\r\n"); ausgabe = (eingabe > 100) ? 100 : 0; printf("Ausgabe %d\n", ausgabe); /* Falls Eingabe größer als 100: Ausgabe 100 Falls Eingabe kleiner als 100: Ausgabe 0 */ getch(); return 0; }
Eine Variante in C++:
#include <iostream> using namespace std; int main() { int abc = 0; int eingabe; cout << "Eingabe: "; cin >> eingabe; cout << endl << endl; (eingabe != abc) ? cout << "True " << eingabe : cout << "False " << eingabe; cin.ignore(1,'\n'); cin.get(); return 0; }
Alternative Syntax in JavaScript:
<script type="text/javascript"> "use strict"; var bedingung = "abc"; var abc = (bedingung == "abc") ? "Ist erfüllt" : "Ist nicht erfüllt"; alert(abc); // Ausgabe mit alert: Ist erfüllt </script>
Alternative Syntax mit PHP:
<?php $bedingung = "abc"; $abc = ($bedingung == "abc") ? "Ist erfüllt" : "Ist nicht erfüllt"; echo $abc; // Ausgabe: Ist erfüllt ?>
Bei einer zweiten Variante, die ohne einen ternären Operator auskommt und sich besonders für den
Einsatz in HTML-Dokumenten eignet, wird die öffnende Klammer gegen einen Doppelpunkt vertauscht und am Ende des kompletten
if-Statements das Schlüsselwort endif notiert.
Eine zweite, für die Verschachtelung von HTML mit PHP-Code geeignete Variante:
<?php $bedingung = "abc"; ?> <p>HTML und PHP in einer Datei vermischen.</p> <?php if ($bedingung == "abc"): ?> <b>Gebe HTML mit fetten Text aus.</b> <?php elseif ($bedingung == "def"): ?> <u>Gebe HTML mit unterstrichenem Text aus.</u> <?php else: ?> <em>Gebe HTML mit kursiv Text aus.</em> <?php endif; // Ausgabe: Gebe HTML mit fetten Text aus. ?>
weiterlesen: Fallunterscheidungen » Switch-Case
Einstieg in C/C++
Win32-API
NET Framework