4D v16.3For...End for |
||
|
4D v16.3
For...End for
For...End for
For...End forによる制御フロー構造の正式な構文は以下のようになります。 For(Counter_Variable;Start_Expression;End_Expression{;Increment_Expression}) For...End forループは、カウンタ変数によりループをコントロールします。
重要:Start_Expression、End_Expression、Increment_Expressionの値は、ループの初めで一度だけ評価されます。 Tips:特別な目的のために、カウンタ変数の値を変更することができます。ループ内でカウンタ変数を変更すると、ループはその影響を受けます。
1. 以下の例は、100回の繰り返しを行います。 For(vCounter;1;100) 2. 以下の例は、配列anArrayの全ての要素に対して処理を行います。 For($vlElem;1;Size of array(anArray)) 3. 以下の例は、テキスト変数vtSomeTextの全ての文字について処理を行います。 For($vlChar;1;Length(vtSomeText)) 4. 以下の例は、テーブル[aTable]のカレントセクションの各レコードについて処理を行います。 FIRST RECORD([aTable]) データベースで作成する大部分のFor...End forループは、上記例題のいずれかの形式になるでしょう。 ループに際してカウンタ変数を増加させるのではなく、減少させたい場合があります。その場合、Start_ExpressionにEnd_Expressionより大きい値を設定し、Increment_Expressionに負の数を指定する必要があります。次に挙げる例題は、前述の例と同じ処理を逆の順序で行います。 5. 以下の例は、100回の繰り返しを行います。 For(vCounter;100;1;-1) 6. 以下の例は、配列“anArray”の全ての要素に対して処理を行います。 For($vlElem;Size of array(anArray);1;-1) 7. 以下の例は、テキスト変数“vtSomeText”の全ての文字について処理を行います。 For($vlChar;Length(vtSomeText);1;-1) 8. 以下の例は、テーブル[aTable]のカレントセクションの各レコードについて処理を行います。 LAST RECORD([aTable]) 必要に応じて、Increment_Expression (正または負の値) に、その絶対値が1より大きな値を指定できます。 9. 以下の例は、配列anArrayの偶数要素について処理を行います。 For($vlElem;2;Size of array(anArray);2)
一定回数のループを行いたいが、他の条件が真になった場合はループから抜けたい場合があります。この場合、ループ内で条件判定を行い、判定結果が真であれば、カウンタ変数に終了値を越える値を明示的に設定することで可能となります。 10. 以下の例は、実際に処理が終了するか、あるいは最初にFALSEに設定されているインタープロセス変数<>vbWeStopがTRUEになるまでレコードセレクションを参照します。この変数はON EVENT CALL プロジェクトメソッドで処理されこのメソッドにより処理を中断します。 <>vbWeStop:=False For...End forループの例をもう一度見てみましょう。 以下の例は、100回の繰り返しを行います。 For(vCounter;1;100) While...End whileループと Repeat...Until ループで、同じ処理を実行する方法を調べてみましょう。 以下の例は、同じ処理を実行するWhile...End whileループです。 $i :=1 `カウンタの初期化 同じ事をRepeat...Until ループで記述すると以下のようになります。: $i :=1 ` カウンタ変数 Tip:For...End forループは、While...End whileやRepeat...Until ループよりも高速です。これは4Dが内部的にカウンタ変数のテストおよび増加を行うからです。可能な限りFor...End forループの使用を推奨します。 カウンタ変数 (インタープロセス、プロセス、ローカル変数) には実数、整数、倍長整数タイプを使用します。数多く繰り返されるループの場合、とくにコンパイルモードでは、倍長整数タイプのローカル変数を使用してください。 11. 以下に例を示します C_LONGINT($vlCounter) ` 倍長整数変数を使用します<gen9> 必要に応じて制御構造をネストすることができます。For...End forループも同じです。誤りを避けるため、各ループ構造ごとに別のカウンタ変数を使用してください。 次に例を示します。 12. 以下の例は二次元配列の全要素への処理です。 For($vlElem;1;Size of array(anArray)) 13. 以下の例は、データベースのすべての日付フィールドに対するポインタの配列を作成します。 ARRAY POINTER($apDateFields;0)
参照
Case of...Else...End case
|
プロパティ
プロダクト: 4D
履歴
ARTICLE USAGE
ランゲージリファレンス ( 4D v16) |