EMZETT.
Login

For-Schleife

For-Schleife Bild: Bagok, Public domain, Wikimedia Commons

Kurz: Eine zählergesteuerte Schleife, die Initialisierung, Abbruchbedingung und Schrittzähler in einem einzigen Konstrukt bündelt — ideal, wenn die Anzahl der Durchläufe im Voraus bekannt ist oder sich aus einer Zählvariable ergibt.

Genauer: Der klassische Aufbau (for (Start; Bedingung; Schritt)) macht auf einen Blick sichtbar, wo die Schleife beginnt, wann sie endet und wie sie sich verändert — im Gegensatz zur While-Schleife, bei der diese drei Teile über den Code verstreut sein können. Viele Sprachen bieten zusätzlich eine “for-each”-Variante, die direkt über die Elemente einer Sammlung iteriert, ohne einen Index manuell zu verwalten.

Im Detail

for (int i = 0; i < 10; i++) {
    System.out.println(i);
}
// Start: i = 0 | Bedingung: i < 10 | Schritt: i++ nach jedem Durchlauf

Alle drei Teile dieses klassischen “C-Style”-For-Aufbaus sind optional und werden nacheinander in einer festen Reihenfolge ausgeführt: zuerst einmalig die Initialisierung, dann vor JEDEM Durchlauf die Bedingungsprüfung, und nach JEDEM Durchlauf der Schrittausdruck — bevor die Bedingung erneut geprüft wird. Diese feste Struktur macht auf einen Blick sichtbar, wie die Schleife sich verändert, ohne den gesamten Schleifenkörper lesen zu müssen, um zu verstehen, wo die Zählvariable aktualisiert wird — ein Vorteil gegenüber einer äquivalenten while-Schleife, bei der die Aktualisierung irgendwo (oder vergessen!) im Schleifenkörper stecken kann.

Deutlich verbreiteter im modernen Alltag ist die for-each-Variante (auch “enhanced for loop” genannt), die direkt über die Elemente einer Sammlung iteriert, ohne einen Index manuell zu führen:

for element in liste:
    verarbeite(element)
for (String name : namen) {
    System.out.println(name);
}

Diese Form ist sicherer (kein Off-by-one-Risiko am Index) und lesbarer, hat aber eine Einschränkung: Man kommt während der Iteration nicht direkt an den Index heran (falls er gebraucht wird, muss man ihn selbst mitzählen oder eine indexbasierte Variante nutzen) und darf die durchlaufene Sammlung in den meisten Sprachen während der Iteration nicht strukturell verändern (Elemente hinzufügen/entfernen) — das löst oft eine Exception aus, weil der interne Iterationszustand dadurch inkonsistent würde.

Siehe auch: Schleifen, While-Schleife, Index