ForAll ステートメント (LotusScript 言語)

配列、リスト、またはコレクションの要素ごとにブロックステートメントを繰り返し実行します。ここでの「コレクション」は、LSX 内で定義されたクラスであり、特に Forall と共に使用するために有効にされたクラスを指します (LSX ツールキットのマニュアルを参照)。OLE オートメーション経由でアクセスされる外部プログラムでも、プログラムのオブジェクトで Forall を使用できる場合があります。

Notes®「製品オブジェクト」の組み込みクラス (NotesDocumentCollection など) は Forall のコレクションとして使用できません。ただし、組み込みオブジェクトの一部のプロパティ (NotesDatabase.Forms など) は配列の値を返すため、これらの配列を Forall でスキャンできます。

注: ForAll ステートメントは Product のコレクションに対して機能しますが、Notes のコレクションはサポートしません。

構文

ForAll refVar In container

[ statements ]

End ForAll

要素

refVar

配列、リスト、またはコレクションの要素の参照変数。ForAll ループ本体では、container で指定した配列、リスト、コレクションの各要素を refVar を使用して参照できます。refVar には、データ型接尾辞を追加できません。

container

要素を処理する配列、リスト、またはコレクションです。

使用法

ループに入ると、refVar は配列、リスト、またはコレクションの最初の要素を参照します。繰り返しが成功するたびに、refVar は次の要素を参照します。ループが完了すると、実行はループの End ForAll ステートメントに続く最初のステートメントから続行されます。

注: 配列の配列に対して ForAll を使用するときは、イテレータを ReDim しないでください。「無効な ReDim」エラーが発生します。

コレクション

コレクションとは、LSX モジュール内で Forall と共に使用するための特別なクラスです (LSX ツールキットのマニュアルを参照)。OLE オートメーション経由でアクセスされる外部プログラムでも、プログラムのオブジェクトで Forall を使用できる場合があります。

NotesDocumentCollection などの 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 関数