EMZETT.
Login

Schleifen

Kurz: Eine Kontrollstruktur, die einen Codeblock wiederholt ausführt, solange (oder bis) eine bestimmte Bedingung erfüllt ist — Grundlage, um sich wiederholende Aufgaben nicht manuell mehrfach hinschreiben zu müssen.

Genauer: Fast jede Sprache kennt mehrere Schleifenarten: kopfgesteuerte (Bedingung wird vor jedem Durchlauf geprüft, z. B. while), fußgesteuerte (Bedingung wird erst nach dem ersten Durchlauf geprüft, z. B. do...while) und zählergesteuerte Schleifen (for). Welche Variante sinnvoll ist, hängt davon ab, ob die Anzahl der Durchläufe vorher bekannt ist und ob der Codeblock mindestens einmal ausgeführt werden muss.

Im Detail

Ohne Schleifen müsste sich wiederholender Code für jede Wiederholung einzeln ausgeschrieben werden — bei zehn Wiederholungen unpraktisch, bei zehntausend oder einer vorher unbekannten Anzahl schlicht unmöglich:

# Ohne Schleife (unpraktikabel):
drucke(1)
drucke(2)
drucke(3)
# ... x1000
 
# Mit Schleife:
fuer i von 1 bis 1000:
    drucke(i)

Innerhalb einer Schleife kontrollieren zwei besondere Sprunganweisungen den Ablauf: break verlässt die Schleife sofort komplett, egal ob die Bedingung noch erfüllt wäre — nützlich, wenn man z. B. ein gesuchtes Element gefunden hat und nicht weitersuchen muss. continue überspringt nur den Rest des AKTUELLEN Durchlaufs und macht direkt mit der nächsten Iteration weiter.

fuer element in liste:
    wenn element == gesucht:
        break          # sofort komplett raus aus der Schleife
    wenn element < 0:
        continue        # diesen Durchlauf überspringen, weitermachen
    verarbeite(element)

Ein häufiger, schwerwiegender Fehler ist die Endlosschleife: Die Abbruchbedingung wird nie erfüllt, weil sich die relevante Variable innerhalb der Schleife nie in die richtige Richtung verändert (z. B. ein vergessenes Inkrementieren des Zählers) — das Programm “hängt” dann scheinbar, bis es manuell abgebrochen oder vom Betriebssystem beendet wird. Absichtliche Endlosschleifen (while (true)) sind trotzdem ein legitimes Muster, z. B. für Server-Hauptschleifen, solange sie einen internen break-Ausstieg für den regulären Abbruchfall haben.

Siehe auch: For-Schleife, While-Schleife, Kopfgesteuerte Schleife, Fußgesteuerte Schleife