Foreach文
出典: フリー百科事典『ウィキペディア(Wikipedia)』
foreach文(フォーイーチぶん)とはプログラミング言語においてリストやハッシュテーブルなどのデータ構造の各要素に対して与えられた文の実行を繰り返すというループを記述するための文である。foreach文はしばしばfor文の一部という位置付けにある。for文と異なり要素の参照順序が定義されないこともある。
目次 |
[編集] 処理の流れ
基本的な構文(Perl)は以下のようになる。
foreach 変数 (リスト等) { 文 }
このループはだいたい次のような手順で実行される。
- 変数にリストの中のある要素への参照を代入する。
- 文を実行する。
- リストの全要素を参照し終わっていない場合は、変数に未参照の要素を代入して文の実行へ戻る。
ここで、線形リストや配列など要素の順序が決まっているものは、通常その順序でループが実行されるので、この場合以下とほぼ同様である。
for($i = 0; $i <= $#list; $i ++) { 変数 = \$list[$i]; 文 }
ただし、ハッシュテーブル(連想配列)については要素の順序関係が決定できないこともあるため、一般に参照順序は不定である。
[編集] 文法
[編集] awk
awkにおいても連想配列の処理を可能にしている。
for(変数 in 配列) { 文 }
[編集] C#
foreach (変数 in リスト等) { 文 }
[編集] C++
C/C++においては言語仕様としてのForeach文は用意されていないが、C++標準ライブラリにfor_eachアルゴリズム(関数)が含まれている。
関数オブジェクト = std::for_each( 先頭イテレータ, 末尾イテレータ, 関数オブジェクト );
[編集] D
式を評価し、その結果は静的配列, 動的配列, 連想配列, 構造体, クラスでなければいけない。式部分が配列である場合は変数は複数宣言する事が出来る。
for(変数 ; 式) { 文 }
[編集] Java 5.0以降
拡張For文などと呼び、Java 5.0 で導入された。For文の特殊なものとして捉えられるが、Foreach文に相当する。
for(変数 : リスト等) { 文 }
[編集] JavaScript,ActionScript
for(変数 in リスト等) { 文 }
変数には要素ではなく、リスト等から要素を取得するためのキーが代入される。
[編集] Perl
foreach 変数 (リスト等) { 文 }
[編集] PHP
foreach (配列 as 変数) { 文 }
foreach (配列 as 変数1 => 変数2) { 文 }
前者の場合、処理手順は他の言語と同様だが、後者の場合、変数1に配列の添字が、変数2に要素が代入される。
[編集] Python
PythonにおけるFor文とは、他の言語におけるForeach文と同等である。
for 変数 in リスト等 : 文
[編集] Ruby
for 変数 in リスト等 文 end
但し、これは以下のイテレータ構文と等価:
リスト等.each do |変数| 文 end
なお、Rubyに関してはもっぱら後者の構文が好まれる傾向にある。
[編集] Visual Basic
For Each 変数 In リスト等 文 Next 変数
[編集] HSP
foreach 変数 文 loop
[編集] なでしこ
(リスト)を反復。 文
変数は「それ」に代入される。
[編集] シェルスクリプト
cshではforeachと書き、shではforと書く。実用上リストの部分にはワイルドカードを含むファイル列を書くことが多い。
csh系
foreach 変数 ( リスト ) 文 end
sh系
for 変数 in リスト do 文 done
[編集] 番外編
[編集] PL/SQL
OracleのPL/SQLにも、カーソルというForEachと似たような機能が実装されている。 カーソルは用途が限定されているため、番外編として紹介する。
SELECT文でとってきた複数レコードを、カーソルを使って順繰り出力するPL/SQL文を示す。
DECLARE CURSOR C IS SELECT * FROM TBL1 WHERE TBL1.FIELD1 >= 100; BEGIN FOR D IN C LOOP DBMS_OUTPUT.PUT_LINE(D.FIELD1 || ' ' || D.FIELD2 || ' ' || D.FIELD3); END LOOP; END;