Home News DOC Class DL Others Cooker
Documents  >  Tutorial  >  each 文
each 文

コレクションの要素を巡回するための each 文について説明します。


目次:


書式

each

コレクション式

ループの手順

巡回の順序

スコープ

予約変数

endeach

書式

each 文は以下の形式です。


each ( コレクション式 )

...

endeach


each 文は、ターゲットコレクションの要素を巡回します。全て要素を巡回したら実行制御が endeach キーワードの次の文に移動します。

実行制御が continue 文か endeach キーワードに達した場合、実行制御がコレクション式の次の文に移動します。

実行制御が break 文に達した場合、実行制御が endeach キーワードの次の文に移動します。


ターゲットコレクションが空の場合、each文は実行されません。

each 文の実行中にターゲットコレクションを操作した結果は未定義です。何が起こるかわかりません。

each

この文が each 文である事を示すキーワードです。

コレクション式

コレクション式は each 文のターゲットコレクションを決定するための式です。コレクションクラスのインスタンスを返す式でなければなりません。

コレクションクラスは以下のクラスです。


list クラス

dictionary クラス

queue クラス

stack クラス

上記のクラスに "{}" を使用したクラス。

コレクション式が proxy クラスを返す場合は proxy クラスの実体が自動的に使用されます。proxy クラスの Entity ゲッターを呼び出したのと同じ結果になります。


list{int} il = new list{int}("{1, 2, 3, 4, 5}");

proxy pro = new proxy(il);

each(pro) // pro.Entity is used.

...

ee


proxy クラスの実体はコレクションクラスのインスタンスを返さなければなりません。

ループの手順

♦1:コレクション式からターゲットコレクションを決定します。これは最初に一度だけ行われます。


♦2:巡回していない要素を取り出します。全ての要素を巡回していれば endeach の次の文に実行制御を移動します。


♦3:each 文の文が実行されます。


♦4:continue 文か endeach に達したら♦2に戻ります。

巡回の順序

以下の順序で要素を巡回します。


list クラス : 要素の追加順。

dictionary クラス : 要素の追加順。

queue クラス : Dequeue() メソッドで取り出す順序。

stack クラス : Pop() メソッドで取り出す順序。

スコープ

each 文はスコープを生成します。


スコープ内で宣言された変数はループ毎に再び宣言されて新しいインスタンスが割り当てられます。

前のループの値を次のループに持ち越すことはありません。

予約変数

実行制御が each キーワードに到達するとスコープが生成され、予約変数 __count が定義され、__key と __value が宣言されます。

__count は int クラスの変数であり、ゼロから始まるループ回数で初期化されます。

__key は string クラスの変数であり、コレクション式の評価の後に初期化されます。ターゲットコレクションが dictionary クラスの場合は、要素の key で初期化されます。それ以外の場合は、空文字列です。

__value の型はターゲットコレクションの要素に依存します。コレクション式の評価の後にターゲットコレクションの要素で初期化されます。

__count は、通常の int クラスのようにオーバーフローが発生することはありません。__count が int クラスの最大値を超えた場合はゼロに戻ります。


each 文のコレクション式の評価の際には既にスコープが生成されています。したがって、コレクション式の中に予約変数を使用した場合、その予約変数は現在の keepon 文が定義したものです。

__key と __value はコレクション式に使用しないでください。例外が発生します。

each 文の文はオプションです。each 文内に任意の数だけ存在できます。

endeach

each 文の終了を示すキーワードです。

endeach の代わりに省略形の ee を使用できます。ee もキーワードであることに注意してください。

1:

class example

2:

open method void someMethod()

3:

message m; // dialog box.

4:

list{int} il = new list{int}("{1, 2, 3, 4, 5}");

5:

each (il)

6:

m.Show(__value); // 1, 2, 3, 4, 5

7:

endeach

8:

em

9:

ec

Copyright © Rice All rights reserved.