Wikipedia · einfach zusammengefasst · Stand
For-Schleife
Viele Programmiersprachen definieren eine For-Schleife als eine Kontrollstruktur, mit der man eine Gruppe von Anweisungen (Block) mit einer bestimmten …
Inhalt6 Abschnitte
Grundidee und Aufbau
Eine For-Schleife ist in vielen Programmiersprachen eine Kontrollstruktur. Mit ihr wird ein Block von Anweisungen mehrfach ausgeführt. Typisch ist, dass die Schleife eine bestimmte Anzahl von Wiederholungen hat oder nacheinander bestimmte Argumente beziehungsweise Elemente verarbeitet.
Die genaue Syntax, also die Schreibweise einer For-Schleife, unterscheidet sich von Programmiersprache zu Programmiersprache. Auch die Semantik, also die genaue Art der Ausführung, ist nicht überall gleich. Trotzdem bestehen For-Schleifen meist aus ähnlichen Grundelementen: einer Schleifenvariable, einem Start oder einer Initialisierung, einer Bedingung oder einem Endwert, einer Veränderung der Schleifenvariable und dem auszuführenden Anweisungsblock.
Numerische Schleife
Bei der numerischen For-Schleife steht die Anzahl der Wiederholungen schon beim Eintritt in die Schleife fest. Sie heißt auch Zählschleife, weil eine Schleifenvariable als Zähler verwendet wird. Diese Variable wird zu Beginn auf einen Startwert gesetzt. Danach wird sie in jedem Durchlauf um eine Schrittweite verändert, bis ein Zielwert erreicht ist.
Schleifenvariable, Startwert, Schrittweite und Endwert müssen numerisch sein. In den meisten Programmiersprachen sind Startwert, Endwert und Schrittweite auf ganze Zahlen beschränkt. In manchen Sprachen ist die Schrittweite sogar fest auf 1 begrenzt, beziehungsweise auf −1, wenn statt „to“ eine absteigende Form wie „downto“ benutzt wird.
Eine typische Grundform in BASIC lautet: „For Zähler = Start To Ende Step n“, danach folgen die zu wiederholenden Anweisungen und am Ende „Next“. Der Zähler läuft also vom Startwert bis zum Ende und verändert sich jeweils um „n“.
Ausdrucksorientierte Schleife
Die ausdrucksorientierte For-Schleife ist flexibler als eine reine Zählschleife. Sie kann auch mit nicht numerischen Schleifenvariablen arbeiten. Dadurch lassen sich zum Beispiel verkettete Listen durchlaufen. Eine verkettete Liste ist eine Datenstruktur, bei der jedes Element auf das nächste Element verweist.
In C-artigen Programmiersprachen hat die For-Schleife die Form: „for (Initialisierung; Test; Fortsetzung) Anweisung“. Nach ISO/IEC 9899:1999 wird sie so ausgeführt: Zuerst wird die Initialisierung ausgewertet. Falls dort Variablen deklariert werden, gelten sie nur innerhalb der For-Schleife. Danach wird der Test als boolescher Ausdruck ausgewertet. Ist sein Wert „false“, endet die Schleife. Ist er nicht „false“, wird die Anweisung ausgeführt. Anschließend wird die Fortsetzung ausgewertet, meistens eine Anweisung zur Veränderung des Zustands. Danach beginnt die Prüfung des Tests erneut.
Diese Form kann numerisch genutzt werden, etwa mit „for (i = 0; i < length; i++)“. Sie kann aber auch nichtnumerisch verwendet werden, etwa beim Durchlaufen einer Liste mit „p = p->next“, bis kein nächstes Element mehr vorhanden ist.
Verschachtelte Schleifen
Eine For-Schleife kann weitere For-Schleifen enthalten. Solche Konstruktionen heißen verschachtelte For-Schleifen. Dabei läuft eine innere Schleife innerhalb eines Durchlaufs der äußeren Schleife. Das ist besonders nützlich, wenn Daten in mehreren Ebenen verarbeitet werden, zum Beispiel bei Tabellen, zweidimensionalen Arrays oder Sortierverfahren.
Ein Beispiel ist Bubblesort. Dieses Sortierverfahren verwendet zwei verschachtelte For-Schleifen. In der inneren Schleife werden benachbarte Elemente miteinander verglichen und vertauscht, wenn sie in der falschen Reihenfolge stehen. Die äußere Schleife steuert dabei, wie weit die innere Schleife noch laufen muss.
Ein weiteres Beispiel ist die Berechnung der Binomialkoeffizienten im Pascalschen Dreieck. Dabei wird ein zweidimensionales Array aufgebaut. Für jede Zeile erzeugt eine äußere Schleife ein neues Array, und eine innere Schleife berechnet die einzelnen Werte aus dem linken und rechten Wert der vorherigen Zeile.
Foreach-Schleifen
Einige Programmiersprachen bieten eine besondere Form der For-Schleife an, mit der einer Variablen nacheinander alle Elemente einer Liste zugewiesen werden. Dieses Konstrukt wird meist Foreach-Schleife genannt. Beispiele für Sprachen mit solchen Konstrukten sind C++, C#, Java, Perl, Python, PHP und Ruby. Die genaue Schreibweise und das Schlüsselwort hängen von der Sprache ab.
In Object Pascal und JavaScript wird eine ähnliche Schleife als For-In-Schleife bezeichnet. In JavaScript bekommt die Variable bei dieser Form aber nur den Index oder Schlüssel zugewiesen, nicht das Element selbst. Für das Element selbst gibt es dort die For-Of-Schleife.
In C++ gibt es seit C++11 die bereichsbasierte For-Schleife, auf Englisch „range-based for“. Sie erleichtert das Iterieren über Container und andere Objekte, für die „std::begin“ und „std::end“ überladen sind. Dazu gehören Container der Standardbibliothek, eingebaute Arrays und benutzerdefinierte Containerdatentypen. Das Schlüsselwort „auto“ kann dabei den Compiler den passenden Typ automatisch bestimmen lassen.
In C# hat die foreach-Schleife die Form „foreach (datatype element in enumerable)“. Sie durchläuft nacheinander alle Elemente einer aufzählbaren Sammlung. Das Beispiel im Artikel verwendet eine generische Liste von Ländern und gibt diejenigen Ländernamen aus, die auf „land“ enden.
In Ada kann eine Foreach-Schleife über den Bereich eines Arrays laufen, etwa mit „for Variable_1 in Variable_2'Range loop“. In Perl sind „for“ und „foreach“ synonym; eine Variable erhält nacheinander die Werte aus einer Liste. Außerdem ist eine C-artige Verwendung mit Initialisierung, Bedingung und Fortsetzung möglich. In PHP hat die Foreach-Schleife die Form „foreach (Array as Schluessel => Wert)“. Dabei erhalten Schlüssel und Wert in jedem Durchlauf ein Schlüssel-Wert-Paar aus dem Array.
Historischer Ursprung
Ein historisches Beispiel für eine frühe For-Schleife findet sich in der Programmiersprache „Superplan“. Heinz Rutishauser entwickelte diese einfache algebraische Programmiersprache von 1949 bis 1951. Er kannte Konrad Zuses Arbeit über Programmiersprachen, also Zuses Plankalkül, und wählte den Namen in Anlehnung an Zuses Bezeichnung „Rechenplan“ für ein einzelnes Programm.
Rutishausers Sprache hatte nur eine Kontrollstruktur: die Für-Anweisung beziehungsweise Für-Schleife. Ein Beispiel wie „Für i=2(1)n“ bedeutet, dass mit Startwert 2 und Schrittweite 1 bis zum Zielwert n gezählt wird. In dem genannten Beispiel wird in einem Array „a“ zu allen Elementen von Index 2 bis Index n jeweils 3 hinzuaddiert.