Foreach-Schleife – Wikipedia

Kontrollflussanweisung

Für jede Schleife werden fast immer Elemente in einer Folge von Elementen durchlaufen.

Foreach-Schleife (oder für jede Schleife) ist eine Kontrollflussanweisung zum Durchlaufen von Elementen in einer Sammlung. Foreach wird normalerweise anstelle eines Standards verwendet für Schleife Erklärung. Im Gegensatz zu anderen for-Schleifenkonstrukten jedoch foreach-Schleifen[1] In der Regel wird kein expliziter Zähler beibehalten: Sie sagen im Wesentlichen “Tun Sie dies für alles in diesem Satz” und nicht “Tun Sie dies” x times “. Dies vermeidet mögliche Fehler nacheinander und vereinfacht das Lesen von Code. In objektorientierten Sprachen wird häufig ein Iterator, auch wenn er implizit ist, als Mittel zum Durchlaufen verwendet.

Das für jeden Die Anweisung in einigen Sprachen hat eine definierte Reihenfolge, in der jedes Element in der Sammlung vom ersten bis zum letzten verarbeitet wird. Das für jeden Anweisungen in vielen anderen Sprachen, insbesondere in Array-Programmiersprachen, haben keine bestimmte Reihenfolge. Dies vereinfacht die Schleifenoptimierung im Allgemeinen und ermöglicht im Besonderen die gleichzeitige Vektorverarbeitung von Elementen in der Sammlung.

Die Syntax variiert zwischen den Sprachen. Die meisten benutzen das einfache Wort forungefähr wie folgt:

for each item in collection:
  do something to item

Sprachunterstützung[edit]

Zu den Programmiersprachen, die jede Schleife unterstützen, gehören ABC, ActionScript, Ada, C ++ 11, C #, CFML (ColdFusion Markup Language), Cobra, D, Daplex (Abfragesprache), Delphi, ECMAScript, Erlang, Java (seit 1.5), JavaScript , Lua, Objective-C (seit 2.0), ParaSail, Perl, PHP, Prolog,[2]Python, REALbasic, Ruby, Scala, Smalltalk, Swift, Tcl, tcsh, Unix-Shells, Visual Basic .NET und Windows PowerShell. Bemerkenswerte Sprachen ohne foreach sind C und C ++ vor C ++ 11.

ActionScript 3.0[edit]

ActionScript unterstützt den ECMAScript 4.0-Standard[3] zum for each .. in[4] Dadurch wird der Wert an jedem Index abgerufen.

var foo:Object = {
	"apple":1,
	"orange":2
};

for each (var value:int in foo) { 
	trace(value); 
}

// returns "1" then "2"

Es unterstützt auch for .. in[5] das zieht den Schlüssel an jedem Index.

for (var key:String in foo) { 
	trace(key); 
}

// returns "apple" then "orange"

Ada[edit]

Ada unterstützt foreach-Schleifen als Teil der normalen for-Schleife. Angenommen, X ist ein Array:

for I in X'Range loop
   X (I) := Get_Next_Element;
end loop;

Diese Syntax wird hauptsächlich für Arrays verwendet, funktioniert jedoch auch mit anderen Typen, wenn eine vollständige Iteration erforderlich ist.

Ada 2012 hat Schleifen verallgemeinert, um Schleifen für jede Art von Container (Array, Listen, Karten …) zu finden:

for Obj of X loop
   -- Work on Obj
end loop;

C.[edit]

Die C-Sprache enthält keine Sammlungen oder ein foreach-Konstrukt. Es verfügt jedoch über mehrere Standarddatenstrukturen, die als Sammlungen verwendet werden können, und foreach kann einfach mit einem Makro erstellt werden.

Es treten jedoch zwei offensichtliche Probleme auf:

  • Das Makro ist unhygienisch: Es deklariert eine neue Variable im vorhandenen Bereich, die nach der Schleife verbleibt.
  • Es kann kein foreach-Makro definiert werden, das mit verschiedenen Sammlungstypen (z. B. Array und verknüpfte Liste) funktioniert oder auf Benutzertypen erweiterbar ist.

C-String als Sammlung von Zeichen

#include 

/* foreach macro viewing a string as a collection of char values */
#define foreach(ptrvar, strvar) 
char* ptrvar; 
for (ptrvar = strvar; (*ptrvar) != '