Definition „Control Flow“ Was ist eine Kontrollstruktur?

Von chrissikraus

Kontrollstrukturen geben vor, wie ein Programm abläuft und unter welchen Bedingungen bestimmte Programmteile aufgerufen oder übersprungen werden.

Kontrollstrukturen legen Bedingungen fest, unter denen ein Programm zu bestimmten Punkten im Quellcode springt.
Kontrollstrukturen legen Bedingungen fest, unter denen ein Programm zu bestimmten Punkten im Quellcode springt.
(Bild: startupstockphotos)

Eine Kontrollstruktur gibt im Programmcode vor, in welcher Reihenfolge Anweisungen ausgeführt werden sollen. Ohne besondere Anweisung werden die programmierten Befehle sequenziell, also einer nach dem anderen ausgeführt. Durch Kontrollstrukturen sind auch alternative Abläufe möglich, z. B. Sprünge zwischen verschiedenen Abschnitten des Codes oder das Ausführen von Anweisungen abhängig von vordefinierten Bedingungen.

Vom Sprungbefehl zur Kontrollstruktur

Bevor es moderne Kontrollstrukturen gab, musste im Quellcode per Sprungbefehl (z. B. Goto) präzise der Ablauf eines Programms gesteuert werden. Entwicklerinnen und Entwickler mussten in frühen Programmiersprachen im Code genau angeben, zu welcher Zeile oder zu welchem per Label gekennzeichneten Abschnitt des Codes als Nächstes gesprungen werden soll.

Mit einem Rücksprung gelangte man nach Abschluss des Unterprogramms oder der zwischengeschobenen Sequenz schließlich zurück zum Hauptprogramm. Das gibt einerseits eine sehr detaillierte Kontrolle darüber, wie ein Programm abläuft, ist aber andererseits enorm kompliziert. Vor allem bei komplexen Programmen verliert man schnell den Überblick und die Programmierung ist unkomfortabel.

Heute ruft man im Kontrast dazu z. B. einfach eine Funktion auf oder lässt eine Schleife bis zur Abbruchbedingung durchlaufen. Danach springt das Programm automatisch wieder zurück an die entsprechende Stelle im Code, ohne dass sich der Developer aktiv um diese Sprünge kümmern müsste.

Sprungbefehle können in vielen Programmiersprachen wie C/C++ trotzdem noch immer genutzt werden, wenn der Programmierer das für nützlich oder notwendig erachtet. Einige moderne Programmiersprachen wie Java oder Python gehen aber so weit, dass sie keine Unterstützung mehr für diese Befehle anbieten. Hier muss der Entwickler den Programmablauf vollständig über Kontrollstrukturen realisieren.

Verschiedene Typen von Kontrollstrukturen

Heute haben Programmierer Zugriff auf viele Arten von Kontrollstrukturen, um den Ablauf ihrer Programme komfortabel zu steuern. Ohne besondere Anweisung läuft Programmcode sequenziell ab, also linear in der Reihenfolge, in der sie aufgeschrieben wurden. Manchmal genügt das schon z. B. wenn man mehrere Teilprobleme eines nach dem anderen abarbeiten möchte. Durch besondere Kontrollstrukturen wie Verzweigungen und Schleifen können komplexere Abläufe einfach realisiert werden.

Bedingungen und Verzweigungen

Manchmal ist es nötig, dass ein Programm abhängig von einer Bedingung unterschiedliche Funktionen aufruft oder Programmteile überspringt. Die simpelste Möglichkeit, um eine bedingte Anweisung im Programmcode zu realisieren, ist die Kombination aus if und else. Wenn eine zuvor definierte Bedingung x zutrifft, soll das Programm die Aktion y ausführen - und wenn nicht, dann soll es eine abweichende Aktion z tun oder abbrechen und ohne etwas zu tun zum weiteren Programmablauf zurückkehren.

Für Entscheidungen mit multiplen Pfaden gibt es außerdem noch mehrfache Verzweigungen. Sie können je nach Bedarf und Technologie z. B. als Konstrukt aus if, then und else oder als switch case realisiert werden. So kann der Programmierer auch dann auf einfache Weise für jeden Fall Anweisungen geben, wenn die Bedingung mehr Zustände als nur wahr oder falsch annehmen kann oder wenn eine Kombination aus verschiedenen Bedingungen zu prüfen ist.

Schleifen

Manchmal muss eine Anweisung so oft wiederholt werden, bis eine vorbestimmte Abbruchbedingung eintritt oder die Bedingung für das Ausführen nicht mehr wahr ist. Dafür stehen dem Programmierer verschiedene Typen von Schleifen zur Verfügung. Die Schleife führt den in ihr definierten Code aus und springt dann automatisch wieder an den Anfang der Anweisung, um die nächste Iteration auszuführen.

Mit einer Schleife können unterschiedliche Szenarien erreicht werden:

  • Zählschleife (For): Die For-Schleife zählt mit jeder Iteration zu einer vorher definierten Obergrenze hin und bricht ab, wenn diese erreicht ist. Mit jeder Wiederholung wird der Rumpf der Schleife ausgeführt. Wenn man etwas z. B. eine vorbestimmte Anzahl an Iterationen durchlaufen lassen möchte, kann man diese Zählschleife nutzen.
  • Mengenschleife (Foreach): Manche Sprachen bieten die Foreach-Schleife, welche alle Elemente einer Menge durchgeht. Die Menge kann z. B. eine Liste oder ein Array sein. Es ist eine Variante der For-Schleife, die ein häufig vorkommendes Szenario etwas komfortabler für Programmierer macht. Man kann diese Art Schleife daher auch mit einer For-Schleife umsetzen, z. B. wenn die Programmiersprache keine vorgefertigte Mengenschleife bietet.
  • Kopfgesteuerte Schleife (While - Do): Bei dieser Schleife wird eingangs die Bedingung geprüft, dann der Schleifenrumpf ausgeführt. Die nächste Iteration beginnt wieder mit dem Prüfen der Bedingung. Wenn die Bedingung schon zu Beginn nicht zutrifft, wird die Schleife gar nicht durchlaufen.
  • Fußgesteuerte Schleife (Do - While): Hier wird die Bedingung erst abgefragt, nachdem der Rumpf der Schleife ausgeführt wurde. Diese Schleife wird also in jedem Fall mindestens einmal durchlaufen, weil die Bedingung erst danach geprüft wird.

(ID:48135260)

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung