Syntaxdiagramme
Syntaxdiagrame sind eine graphische Beschreibung von Programmen. Sie zeigen die Folge der Anweisungen, die in einem Programm nacheinander umgesetzt werden müssen, um die Lösung des Problems zu erreichen, sie sind also Programmablaufpläne.
Die Abläufe besitzen alle genau einen Eingang und genau einen Ausgang und sind beliebig schachtelbar. Es ist nachgewiesen, dass jeder denkbare Programmablauf mit Syntaxdiagrammen dargestellt werden kann (manchmal mit Hilfe von Statusvariablen). In den gängigen Programmiersprachen werden diese Ablaufformen durch entsprechende Anweisungen der Programmiersprache realisiert. Entsprechend ist im folgenden statt von Ablaufformen auch von Anweisungen die Rede. Die Ergänzungen in rot zeigen euch, wie die entsprechenden Anweisungen in C, C++ und Java "aussehen".
Programmablauf-Sequenzen
Die Sequenz ist die Ausführung der dargestellten Aktionen bzw. Anweisungen in der angegebenen Reihenfolge.
Bedingte Ablaufformen bzw. Anweisungen (conditional statements)
if-Verzweigung, einseitig (if statement)
if-Verzweigung, zweiseitig (if statement)
Schleifen
do-Schleife, nichtabweisende Schleife (do statement, do loop)
Die do-Schleife führt die Schleifenaktion mindestens einmal aus und wiederholt sie, solange die Schleifenbedingung noch wahr ist.
Dieses Konzept wird einem Programmieranfänger vielleicht als die "natürliche" Form einer Schleife erscheinen. In der Programmierrealität gibt es aber häufig Situationen, in denen die Voraussetzungen für die Ausführung der Schleifenaktion von Anfang an nicht unbedingt gegeben sind. In solchen Situationen muss auch die die erste Ausführung der Schleifenaktion durch eine Bedingung oder "Abfrage" kontrolliert oder geschützt werden.
Dies erreicht man mit der while-Schleife.
Wer sich unsicher ist, welche Form der Schleife in einer bestimmten Situation angemessen ist, sollte zuerst versuchen, die sicherere while-Schleife einzusetzen.
while-Schleife, abweisende Schleife (while statement, while loop)
Bei der while-Schleife steht jede Ausführung der Schleifenaktion unter der Kontrolle der Schleifenbedingung. Es ist also möglich, daß die Schleifenaktion nicht ein einziges Mal ausgeführt wird.
Anweisungen in Java
Überblick über die Syntax von Java-Anweisungen zur Motivation der Ausdrucksanweisung (expression statement):
Die Wertzuweisung (assignment) ist in erster Näherung ein Ausdruck und kann als solcher z.B. in Schleifenbedingungen verwendet werden. Erst mit dem folgenden Semikolon wird die Wertzuweisung zur "Wertzuweisungsanweisung", die ein Spezialfall der Ausdrucksanweisung ist.
Syntax einer Anweisung
Syntax einer ausführbaren Anweisung
Syntax der leeren Anweisung
Die Leeranweisung ist vermutlich hauptsächlich deshalb zugelassen, damit man auch schon einmal "vorsichtshalber" oder "versehentlich" ein Semikolon setzen kann. Es ist natürlich nur hinter Anweisungen und Blöcken etc. zulässig. Wenn man ein if mit einem leeren else-Zweig erzwingen will, muss eine leere Anweisung verwendet werden.
Ausdrucksanweisung/Befehle (expression statement)
Zulässige Ausdrücke in Ausdrucksanweisungen
Syntax der Wertzuweisung
Die Wertzuweisung ist in C, C++ und Java ein Ausdruck! Sie wird erst mit einem folgenden Semikolon zu einer Anweisung.
Syntax der if-Anweisung, Blöcke
Die Bedingung ist ein logischer Ausdruck, der in runde Klammern eingeschlossen werden muss. Danach folgt zwingend der "Wahr-Zweig". Abschließend kann ein "Falsch-Zweig" folgen, der durch das Schlüsselwort else eingeleitet wird.
Fehlt ein else-Zweig, so handelt es sich lediglich um die bedingte Ausführung des "Wahr-Zweigs".
Viele andere Programmiersprachen leiten den Wahr-Zweig mit dem Schlüsselwort then ein. Dies existiert in C und den C-Nachfolgern nicht. Hier dienen die runden Klammern der if-Bedingung zur Abgrenzung von Bedingung und Wahr-Zweig.
Beispiel:
Ein Block ist eine Zusammenfassung von Anweisungen durch geschweifte Klammern:
Syntax der while-Anweisung
Syntax der do-Anweisung
Syntax der for-Anweisung
Die switch-Anweisung
Die switch-Anweisung dient zur Realisierung einer Mehrfachverzweigung in verschiedene Fällen (cases). Nachdem der switch-Ausdruck ausgewertet wurde, wird in den entsprechenden case verzweigt. Ist kein case mit geeignetem Wert vorhanden, wird in den default-(otherwise)Zweig verzweigt. Ist auch kein default-Zweig vorhanden, wird die switch-Anweisung verlassen. Die Ausführung eines Zweiges wird solange fortgesetzt, bis eine break-Anweisung das Verlassen der switch-Anweisung erzwingt oder das Ende der Anweisung erreicht ist. Jeder case muss also mit einer break-Anweisung abschließen (nicht vergesssen!).
Wenn mehrere Werte einen einzigen Fall bilden sollen, können mehrere case-Klauseln aufeinander folgen:
Syntax der switch-Anweisung