foreach文(フォーイーチぶん)とはプログラミング言語においてリストやハッシュテーブルなどのデータ構造の各要素に対して与えられた文の実行を繰り返すというループを記述するための文である。foreach文はしばしばfor文の一部という位置付けにある。for文と異なり要素の参照順序が定義されないこともある。基本的な構文 (Perl) は以下のようになる。このループはだいたい次のような手順で実行される。ここで、線形リストや配列など要素の順序が決まっているものは、通常その順序でループが実行されるので、この場合以下とほぼ同様である。ただし、ハッシュテーブル(連想配列)については要素の順序関係が決定できないこともあるため、一般に参照順序は不定である。awkにおいても連想配列の処理を可能にしている。 foreach (変数 in 配列)配列のほか、IEnumeratorもしくはIEnumeratorを実装したオブジェクトでもよい。C++は、2011年での規格改定(通称C++11)にて、範囲ベースの for ループが言語仕様として追加されている。上記で配列と記した箇所には、配列のほか、std::vectorやstd::arrayのような標準ライブラリにおいてコンテナに分類される各種のオブジェクトなども使用できる。そのほか、1998年の標準規格化当初からC++標準ライブラリにfor_eachアルゴリズム(関数テンプレート)が存在する。C++11では、C#同様に型推論およびラムダ式を組み合わせることで、上記の構文が威力を発揮するようになる。また、C++/CLI言語およびMicrosoft Visual C++ 2005以降の独自拡張機能では、codice_1文を使用できるが、不安定で正常に動作しない場合がある。ただしこれはC++11における範囲ベース for ループとは互換性を持たない。式を評価し、その結果は静的配列、動的配列、連想配列、構造体、クラスでなければいけない。式部分が配列である場合は変数は複数宣言する事が出来る。拡張For文などと呼び、Java 5.0 で導入された。For文の特殊なものとして捉えられるが、Foreach文に相当する。オブジェクトの反復処理にはfor-in文を用いる。変数にはプロパティ名(連想配列で言うキー)が代入されるので、プロパティの値は式 codice_2 で取得する。JavaScriptのfor-in文は、ユーザー定義のプロパティについて、プロトタイプチェーンをさかのぼって反復処理を行う。このため、特に配列に対してfor-in文を用いると、他の言語とは異なる挙動をすることがある。ECMA-262第5版 (JavaScript 1.6, ActionScript 3.0) からは、ArrayインスタンスにforEachメソッドが追加された。ECMA-262第6版からは、配列などのiterableオブジェクトの値で反復処理をするfor-of文も導入された。しばしばforが代用とされる。Perlにおいて、forとforeachは同義語である。 foreach (配列 as 変数) {前者の場合、処理手順は他の言語と同様だが、後者の場合、変数1に配列の添字が、変数2に要素が代入される。PythonにおけるFor文とは、他の言語におけるForeach文と同等である。 for 変数 in リスト等これは以下のイテレータ構文と等価である。なお、Rubyに関してはもっぱら後者の構文が好まれる傾向にある。 For Each 変数 In リスト等 foreach (変数 in リスト等) { foreach 変数 (リスト)を反復。変数は「それ」に代入される。cshではforeachと書き、shではforと書く。実用上リストの部分にはワイルドカードを含むファイル列を書くことが多い。csh系sh系OracleのPL/SQLにも、カーソルというForEachと似たような機能が実装されている。カーソルは用途が限定されているため、番外編として紹介する。SELECT文でとってきた複数レコードを、カーソルを使って順繰り出力するPL/SQL文を示す。
出典:wikipedia