fromto 文

インデックスによってループを制御するfromto文について説明します。


目次:


書式

fromto

開始値と終了値

ループの手順

スコープ

予約変数

endfromto

書式

fromto文は以下の形式です。


fromto ( 開始値 , 終了値 )

...

endfromto


fromto文は開始値と終了値によって決定されたインデックスが条件を満たしている間ループを繰り返します。インデックスが条件を満たさなくなったら実行制御がendfromtoの次の文に移動します。

実行制御がcontinue文かendfromtoに達した場合、ループインデックスを更新した後に実行制御がfromto文の最初の文に移動します。

実行制御がbreakに達した場合、実行制御がendfromtoの次の文に移動します。

fromto

fromto文である事を示すキーワードです。

開始値と終了値

開始値と終了値はfromto文のインデックスを決定するための式です。括弧で囲まれカンマで区切る必要があります。

開始値と終了値はintクラスを返す式でなければなりません。両者はfromtoの最初ループの前に一度だけ評価され、ループの最中にその値が変わることはありません。


開始値と終了値が等しい場合はループが実行されません。

開始値と終了値がproxyクラスを返す場合はproxyクラスの実体が自動的に使用されます。proxyクラスのEntityゲッターを呼び出したのと同じ結果になります。


proxy pro = new proxy(0);

fromto(pro, 10) // pro.Entity is used.

...

eft


proxyクラスの実体はintクラスでなければなりません。

ループの手順

♦1:fromto文の最初に開始値と終了値が評価されループインデックスが開始値に初期化されます。これは最初に一度だけ行われます。


♦2:条件の判定が行われます。ループインデックスと終了値が等しければendfromtoの次の文に実行制御を移動します。


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


♦4:continue文かendfromtoに達したらループインデックスを以下の様に増減します。


開始値 < 終了値の場合、ループインデックスを1加算します。

開始値 > 終了値の場合、ループインデックスを1減算します。


♦5:♦2に戻ります。

スコープ

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


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

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

予約変数

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

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

__indexはintクラスの変数です。開始値と終了値の評価後に現在のループインデックス値で初期化されます。

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


fromto文の開始値と終了値の評価の際には既にスコープが生成されています。したがって、開始値と終了値の中に予約変数を使用した場合、その予約変数は現在のfromto文が定義したものです。

__indexは開始値と終了値に使用しないでください。例外が発生します。

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

endfromto

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

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

1:

class example

2:

open method void someMethod()

3:

message m; // dialog box.

4:

fromto (100, 105)

5:

m.Show(__count); // 0, 1, 2, 3, 4

6:

m.Show(__index); // 100, 101, 102, 103, 104

7:

endfromto

8:

em

9:

ec

Copyright © Rice All rights reserved.