collection.filter( ) ファンクションは、元のコレクションのうち、methodName 引数で指定したメソッドの結果がtrueになる全ての要素を格納した新しいコレクションを返します。このファンクションはシャロウ・コピー、つまり両方のコレクション内のオブジェクトあるいはコレクションが同じ参照を共有するコピーを返します。元のコレクションが共有コレクションであった場合、返されたコレクションもまた共有コレクションになります。
注: このコマンドは元のコレクションは変更しません。
methodName 引数には、コレクションの要素を評価するために使用するメソッドの名前を渡し、必要であればparam 引数(任意)に必要な引数を渡します。methodName で指定したメソッドはどんなテストも実行することができ、引数を取っても取らなくても構いませんが、条件を満たすそれぞれの要素の$1.result 内にtrue を返す必要があり、その結果その要素は新しいコレクションに含まれます。
methodName 引数は以下の引数を受け取ることができます:
- $1.value: フィルターする要素の値
- $2: param 引数
- $N...: param2...paramN
methodName 引数は以下の引数を設定します:
- $1.result (ブール): 要素の値がフィルターの条件に合致し新コレクションに含まれなければならない場合にはtrueになります。
- $1.stop (ブール、任意): メソッドのコールバックを止める場合にはtrueになります。返された値は最後に計算されたものです。
length が6未満であるコレクションのテキスト要素を取得したい場合を考えます:
LengthLessThan メソッドのコードは以下のようになります:
C_OBJECT($1)
C_LONGINT($2)
If(Value type($1.value)=Is text)
$1.result:=(Length($1.value))<$2
End if
値の型に応じて要素をフィルターしたい場合を考えます:
TypeLookUp メソッドのコードは以下のようになります:
C_OBJECT($1)
C_LONGINT($2)
If(OB Get type($1;"value")=$2)
$1.result:=True
End if