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と__indexが定義され、__keyと__valueが宣言されます。

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

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

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

__countと__indexは通常のintクラスのようにオーバーフローが発生することはありません。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.