EMZETT.
Login

Kopfgesteuerte Schleife

Kopfgesteuerte Schleife Bild: Taylor, CC BY-SA 4.0, Wikimedia Commons

Kurz: Eine Schleife, bei der die Abbruchbedingung VOR jedem Durchlauf geprüft wird — ist sie beim ersten Check bereits falsch, wird der Schleifenkörper kein einziges Mal ausgeführt.

Genauer: While-Schleifen und For-Schleifen sind typischerweise kopfgesteuert. Das Gegenteil ist die fußgesteuerte Schleife (do...while), die den Codeblock immer mindestens einmal ausführt, weil die Bedingung erst am Ende geprüft wird. Die Wahl zwischen beiden hängt davon ab, ob ein “mindestens ein Durchlauf” garantiert sein muss.

Im Detail

solange (bedingung) {     // Prüfung VOR dem ersten Durchlauf
    // Codeblock
}

Ist die Bedingung schon beim allerersten Check falsch, wird der Codeblock KEIN einziges Mal ausgeführt — das unterscheidet die kopfgesteuerte Schleife grundlegend von der fußgesteuerten Variante. Ein typisches Beispiel, bei dem das wichtig ist:

liste = []   // leere Liste
fuer element in liste:
    verarbeite(element)   // wird nie aufgerufen, liste ist leer

Bei einer leeren Datenstruktur ist genau dieses Verhalten (nichts tun) meist das gewünschte — würde man stattdessen eine fußgesteuerte Schleife verwenden, müsste man vor jedem Einsatz manuell prüfen, ob überhaupt Elemente vorhanden sind, um einen fehlerhaften ersten Durchlauf auf leeren Daten zu verhindern.

Die meisten Schleifenarten, die man im Alltag verwendet (while, for, for-each über eine Collection via Iterator), sind kopfgesteuert — die fußgesteuerte do...while-Schleife ist die deutliche Ausnahme und wird entsprechend seltener gebraucht, meist nur dort, wo ein “mindestens einmal ausführen” ausdrücklich gewünscht ist (z. B. eine Benutzereingabe, die man mindestens einmal abfragen will, bevor man sie zum ersten Mal prüfen kann).

Sprachübergreifende Umsetzung

Praktisch jede verbreitete Programmiersprache implementiert kopfgesteuerte Schleifen nach demselben Grundmuster, nur mit leicht unterschiedlicher Syntax: while (bedingung) { ... } in Java/JavaScript/C, while bedingung: in Python (ohne Klammern, Einrückung statt geschweifter Klammern). Das zugrundeliegende Konzept — Bedingung prüfen, dann eventuell ausführen, wiederholen — bleibt über alle Sprachen hinweg identisch, nur die konkrete Notation unterscheidet sich.

Kopfgesteuert bei for-each-Schleifen

Auch eine for-each-Schleife über eine Collection oder ein Array ist im Kern kopfgesteuert, auch wenn das auf den ersten Blick weniger offensichtlich ist als bei einer klassischen while-Schleife: intern prüft ein Iterator vor jedem Durchlauf, ob noch ein nächstes Element vorhanden ist (hasNext()), bevor er es überhaupt liefert — bei einer leeren Collection liefert diese Prüfung sofort “nein”, der Schleifenkörper läuft dementsprechend kein einziges Mal.

Siehe auch: Schleifen, Fußgesteuerte Schleife, While-Schleife, Iterator