· 

if-Anweisungen

1. Einführung

Kontrollstrukturen sind Anweisungen in imperativen Programmiersprachen. Sie werden genutzt, um den Ablauf eines Computerprogramms zu steuern und komplexe Zusammenhänge zu implementieren. Man unterscheidet typischerweise zwei verschiedene Arten von Kontrollstrukturen, nämlich Schleifen und Verzweigungen.
If-Anweisungen, um die es in diesem Artikel geht, gehören zu letzteren Kategorie, also den Verzweigungen. An ihnen teilt sich das Programm in verschiedene Handlungsstränge auf, die abhängig von einer bestimmten Bedingung ausgeführt oder nicht ausgeführt werden.
Wichtig: Es gibt keine if-Schleifen. Das ist ein gerne gemachter Fehler bei Programmieranfängern. Es gibt andere Kontrollstrukturen, wie etwa die for-Schleife und die while-Schleife, doch weil bei den if-Anweisungen nichts wiederholt wird, spricht man hier nicht von einer Schleife. Wenn du dich mit anderen Programmierern unterhältst oder im Internet nach Code-Snippets suchst, solltest du dieses Wording im Hinterkopf behalten.

2. Aufbau von if-Anweisungen

Fast alle Programmiersprachen kennen das Konzept der if-Anweisungen. In der natürlich gesprochenen Sprache des Menschen versteht man darunter einfache Wennn-Dann-Aussagen, z. B. "wenn dein Kontostand kleiner als 0 ist, dann musst du arbeiten, ansonsten kannst du dich ausruhen" oder "wenn die Türe zu ist, dann öffne sie".
So ähnlich ist der Aufbau auch im Programmcode. Als allgemeinen Bauplan für eine if-Anweisung kann man also festlegen:
WENN Bedingung
DANN Anweisungen
SONST Anweisungen
Viele Programmiersprachen verzichten auf das Schlüsselwort DANN und beschränken sich nur auf die Wörter WENN und SONST. Das, was auf das Wort WENN folgt, ist eine sogenannte Bedingung, die mit logischen Operatoren wie <, > und == formuliert wird. Wenn die Bedingung erfüllt ist, dann wird der direkt darauf folgende Anweisungsblock ausgeführt und andernfalls der Anweisungsblock, der hinter dem SONST steht.
Der Internationalität geschuldet werden Schlüsselwörter in Englisch formuliert, also
IF Bedingung
THEN Anweisungen
ELSE Anweisungen

Alles, was im THEN-Block an Anweisungen folgt, nennt man den if-Zweig. Alle Anweisungen hinter dem ELSE stehen im sogenannten Else-Zweig.

Wie bereits erwähnt, kann die konkrete Syntax von Programmiersprache zu Programmiersprache abweichen. Manchmal kommt zusätzlich zu IF, THEN und ELSE noch ein ENDIF hinzu, mit dem dem Compiler signalisiert werden soll, dass die if-Anweisung beendet ist.
IF Bedingung
THEN Anweisungen
ELSE Anweisungen
ENDIF
Als Beispiel können wir die zuvor bereits erwähnte Konto-Modellierung betrachten.
IF kontostand < 0
THEN arbeiten()
ELSE 
     ausruhen()
ENDIF
Wie schon erwähnt, kann man in einigen Programmiersprachen das Schlüsselwort THEN weglassen und auch auf das ENDIF verzichten.
IF kontostand < 0
  arbeiten()
ELSE ausruhen()
Oft werden stattdessen Einrückungen vorgenommen, um dem Compiler ohne ein weiteres Schlüsselwort zu signalisieren, was wohin gehört. In Python bspw. ist es wichtig, dass der Code richtig eingerückt ist, wohingegen in anderen Programmiersprachen (wie etwa Java) der gesamte Quellcode theoretisch auch in eine Zeile geschrieben werden könnte.
Der ELSE-Zweig ist übrigens ebenfalls optional. Manchmal möchte man nur eine bestimmte Anweisung ausführen, wenn eine Bedingung erfüllt ist und ansonsten nichts machen. Statt einen ELSE-Block zu definieren und diesen dann leer zu lassen (schließlich soll ja "nichts" gemacht werden) lässt man bereits einfach das Schlüsselwort ELSE weg.
Wenn man z. B. eine Alarmanlage implementieren möchte, dann kann man als Bedingung "Bewegung registriert" festlegen und in diesem Fall Alarm schlagen. Ansonsten soll nichts gemacht werden. Hierfür wird nur die Bedingung und der THEN-Teil benötigt:
IF Bewegung registriert
THEN Alarm_schlagen()
Das Schlüsselwort THEN kann man aber (wie bereits erwähnt) in einigen Programmiersprachen bei entsprechender Einrückung auch weglassen.
IF Bewegung registriert
   Alarm_schlagen()
Wie man dafür sorgen kann, dass die Alarmanlage ständig lauscht, lernst du in meinem Video zur While-Schleife.

3. Verschachtelungen

Oft ist es mit einer if-Anweisung nicht getan. Es kann auch passsieren, dass man viele Fälle nacheinander überprüfen und für jeden Fall eine unterschiedliche Aktion triggern möchte. Z. B. könnte man sich für eine Videospielfigur einen Controller programmieren, der beim Drücken bestimmter Tasten unterschiedliche Aktionen ausführt. Hierzu ist eine sogenannte if-Kaskade notwendig. Im ELSE-Block wird dann erneut eine if-Anweisung begonnen und so die einzelnen Stufen abgeklappert:
IF taste == rechts
THEN nach_rechts_gehen()
ELSE IF taste == links
THEN nach_links_gehen()
ELSE IF taste == unten
THEN ducken()
ELSE springen()
Auch hier kann man die Schlüsselwörter "THEN" weglassen und entsprechend einrücken.
IF taste == rechts
   nach_rechts_gehen()
ELSE IF taste == links
   nach_links_gehen()
ELSE IF taste == unten
   ducken()
ELSE springen()
Am Ende der if-Kaskade steht ein ELSE anstelle eines ELSE IF. Das bedeutet, dass wenn weder nach rechts, nach links noch nach unten gedrückt wird, dass dann immer nach oben gesprungen wird, da alle vorherigen Fälle nicht erfüllt wurden. Möchte man hingegen, dass keine Aktion ausgeführt wird, wenn keine der Tasten gedrückt wurde (auch nicht die Taste "Oben"), dann muss man im letzten ELSE-Block auch ein ELSE IF verwenden. Dann wird diese Bewegung tatsächlich auch erst ausgeführt, sobald jemand die Taste "Oben" drückt. Auf diese Art und Weise kann man beliebig viele weitere Tastenbelegungen implementieren.
IF taste == rechts
   nach_rechts_gehen()
ELSE IF taste == links
   nach_links_gehen()
ELSE IF taste == unten
   ducken()
ELSE IF taste == oben
   springen()
Auch für die Konstruktion ELSE IF gibt es in einigen Programmiersrpachen (so z. B. Python) ein eigenes Schlüsselwort, um Zeichen einzusparen. Python nutzt hierfür das Schlüsselwort ELIF (kurz für "ELSE IF").
Um solche langen if-Kaskaden programmiertechnisch schöner abzubilden, kann man sogenannte Schalterblöcke verwenden. Hierzu kannst du dir mein Video zu Schalterblöcken (auf Englisch "Switch Cases") ansehen.