LOTUSSCRIPT 言語
配列、リスト、またはコレクションの要素ごとにブロックステートメントを繰り返し実行します。
メモ ForAll ステートメントは Product のコレクションに対して機能しますが、Lotus Notes のコレクションはサポートしません。
構文
ForAll refVar In container
[ statements ]
End ForAll
要素
refVar
ループに入ると、refVar は配列、リスト、またはコレクションの最初の要素を参照します。繰り返しが成功するたびに、refVar は次の要素を参照します。ループが完了すると、実行はループの End ForAll ステートメントに続く最初のステートメントから続行されます。
メモ 配列の配列に対して ForAll を使用するときは、イテレータを ReDim しないでください。「無効な ReDim」エラーが発生します。
コレクション
コレクションとは、LSX モジュール内で Forall と共に使用するための特別なクラスです (LSX ツールキットのマニュアルを参照)。OLE オートメーション経由でアクセスされる外部プログラムでも、プログラムのオブジェクトで Forall を使用できる場合があります。
NotesDocumentCollection などの Lotus Notes 製品のオブジェクトの場合、コレクションとして Forall と共に使用することはできません。ただし、配列を返すプロパティ (NotesDatabase の Forms など) の場合、Forall と共に使用することができます。
ループを早期に終了する
Exit ForAll ステートメントや GoTo ステートメントでループが終了する前に、強制的に終了できます。Exit ForAll に到達すると、実行はすぐにループのターミネータ (End ForAll) に続く最初のステートメントに移ります。GoTo ステートメントに到達すると、実行はすぐに指定されたラベルのあるステートメントに移ります。
refVar を使用する
refVar は実際の配列、リスト、またはコレクションの要素の別名であるため、refVar に新しい値を代入することでその要素の値を変更できます。以下に例を示します。
ForAll x In y x = x + 1 End ForAll
このスクリプトは、y という名前の配列、リスト、またはコレクションの各要素の値に 1 を加えます。
container がリストの場合、refVar が現在参照しているリスト要素の名前 (リストタグ) を得るために refVar を ListTag 関数に渡すことができます。以下に例を示します。
Print ListTag(refVar)
refVar は ForAll ステートメントで暗黙に定義されるため、独自の変数宣言には含められません。refVar のスコープはループであるため、ループの外側からは参照できません。
container が配列やリストの場合、refVar のデータ型は処理されている配列やリストのデータ型と同じです。このデータ型をコンパイル時に判別できないときや、container がコレクションのときは、refVar は Variant 型です。その場合、Variant 型にはユーザー定義データ型の値を代入できないため、配列やリストのデータ型にユーザー定義データ型を使用することはできません。
refVar は、後の ForAll ループで、refVar が最初定義された ForAll ループ内で使用された内容のデータ型と一致すると再利用されます。
参照変数には ReDim ステートメントを使用できません。たとえば、zArr が配列の配列で、ForAll ステートメントが次のように始まると仮定します。
ForAll inzArr In zArr
この場合、ステートメント ReDim inzArr(2) はエラーとなります。
クロスリファレンス
式言語の @Transform 関数
例 関連項目