Home About Rice Downloads Documents Others Cooker CookerGX
Documents  >  Tutorial  >  eachstatement
each文

この章の目的。

each文について学びます。

コレクションの要素に対する反復。

each文は、コレクションの要素に対する反復処理のための文です。

each文は、以下の形式です。


each ( コレクション式 )

文...

endeach


コレクション式は、コレクションのインスタンスを返す式でなければなりません。each文のターゲットコレクションは、each文の最初のループの前にコレクション式によって決定されます。ループの最中にターゲットが変わることはありません。

each文は、ターゲットの各の要素にたいしてループを繰り返します。全てのループが終了したら、実行制御がendeachキーワードの次の文に移動します。

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

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

each文はendeachキーワードで終了しなければなりません。

each文の実行中のターゲットに対する操作の結果は未定義です。それは行うべきではありません。

each キーワード。

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

コレクション式。

コレクション式は、each文のターゲットコレクションを決定するための式です。括弧で囲んで記述します。

コレクション式は、コレクションクラスのインスタンスを返す式でなければなりません。つまり、list, dictionary, queue, stackクラスでなければなりません。

ターゲットは、each文の最初のループの前に決定され、ループの最中に変わることはありません。

ターゲットが空の場合、each文は実行されません。

ターゲットコレクションがスタックの場合は、each文が要素を列挙する順序に注意が必要です。スタックの要素にたいする列挙の順序は、スタックにプッシュされた順序とは逆の順序です。 つまり、最後にプッシュされた要素が最初に列挙されます。

each文の終了。

each文の終了は、endeachキーワードで表します。

スコープ

each文は、スコープを生成します。スコープの範囲は、eachキーワードからendeachキーワードまでです。

each文内で宣言された変数は、each文内だけで参照可能です。

スコープ内で宣言された変数は、新たなループが始まるたびにクリアされて、再び宣言されます。

変数には、宣言のたびに新しいインスタンスが割り当てられます。前のループの値を次のループに持ち越すことはありません。

予約変数。

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

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

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

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

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

条件式の中で予約変数を使うときは注意してください。特にループ文がネストしている時は要注意です。ループ文がネストしている場合は、内部のループ文の予約変数が、外部のループ文の予約変数を隠蔽します。

each文のコレクション式は、そのeach文が生成するスコープの中に含まれます。したがって、コレクション式の中の予約変数は、そのeach文が定義したものです。

__keyと__valueは、コレクション式に使用しないでください。例外が発生します。__keyと__valueは、コレクション式の評価時に宣言されています。しかし、それは、その時点で定義されていません。

ループの再開位置。

each文のコレクション式は、ループの最初に一度だけ評価されます。評価の結果は、ループ中は不変です。したがって、each文のループの再開位置は、コレクション式の次の文です。

Copyright © Rice All rights reserved.