EMZETT.
Login

do-while-Schleife

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

Kurz: Die klassische Syntaxform der fußgesteuerten Schleife — führt den Codeblock aus und prüft erst danach, ob er erneut durchlaufen werden soll.

Genauer: Der Aufbau do { ... } while (Bedingung); dreht das Prinzip der While-Schleife um: statt “prüfen, dann ausführen” gilt “ausführen, dann prüfen”. Dadurch läuft der Block immer mindestens einmal — praktisch für Eingabevalidierung, bei der der Nutzer erst einmal etwas eingeben muss, bevor geprüft werden kann, ob die Eingabe gültig war.

Im Detail

do {
    eingabe = frage_nutzer("Zahl zwischen 1 und 10: ")
} while (eingabe < 1 ODER eingabe > 10)

Dieses Beispiel zeigt den klassischen Anwendungsfall: Man KANN die Bedingung (ist die Eingabe gültig?) erst prüfen, NACHDEM überhaupt eine Eingabe vorliegt — bei einer normalen While-Schleife müsste man deshalb die Eingabe künstlerisch “vor” die Schleife duplizieren, damit beim ersten Bedingungscheck bereits ein Wert existiert:

// Äquivalent mit while, aber mit duplizierter Eingabe-Logik:
eingabe = frage_nutzer(...)
while (eingabe < 1 ODER eingabe > 10):
    eingabe = frage_nutzer(...)

Die do-while-Variante vermeidet diese Code-Duplizierung, weil die Garantie “läuft mindestens einmal” bereits in der Struktur selbst steckt. Genau das ist der einzige, aber entscheidende Unterschied zur normalen while-Schleife: Bei while kann es sein, dass der Codeblock NULL Mal ausgeführt wird (wenn die Bedingung von Anfang an falsch ist), bei do-while läuft er garantiert mindestens EINMAL, egal wie die Bedingung zu Beginn aussieht — weil sie ja erst am Ende geprüft wird.

Nicht jede Sprache bietet do-while als eigenes Sprachkonstrukt an (Python zum Beispiel nicht) — dort emuliert man das Verhalten meist mit einer Endlosschleife plus explizitem break am Ende:

while True:
    eingabe = frage_nutzer(...)
    if 1 <= eingabe <= 10:
        break

In der Praxis ist do-while seltener anzutreffen als while oder for, weil der Anwendungsfall (“Block muss mindestens einmal laufen, bevor die Bedingung überhaupt geprüft werden kann”) spezieller ist — trotzdem lohnt es sich, das Muster zu kennen, weil es genau in diesem Fall lesbareren Code ohne Duplizierung ermöglicht.

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