メインコンテンツまでスキップ
バージョン: v18

コレクション

コレクションとは、類似または混在した型 (テキスト、数値、オブジェクト、ブール、コレクション、null) の値が順番に並べられたリストです。

コレクション型の変数を扱うには、オブジェクト記法を使用する必要があります (オブジェクト記法の使用 参照)。

コレクション要素にアクセスするには、大カッコ内に要素番号を渡します:

collectionRef[expression]

expression には正の整数を返す有効な 4D 式であればどんなものでも渡すことができます。 例:

 myCollection[5]  // コレクションの6番目の要素にアクセス
myCollection[$var]

注: コレクション要素は0 番から始まるということに注意してください。

オブジェクト記法を使用して、コレクションの要素に値を代入したり、コレクション要素の値を取得したりすることができます:

 myCol[10]:="My new element"
$myVar:=myCol[0]

コレクションの最後の要素を超える要素番号 (インデックス) を指定した場合、コレクションは自動的にリサイズされ、途中のすべての値には null 値が割り当てられらます:

 C_COLLECTION(myCol)
myCol:=New collection("A";"B")
myCol[5]:="Z"
//myCol[2]=null
//myCol[3]=null
//myCol[4]=null

初期化

New collection コマンドを使うなどして、コレクションはあらかじめ初期化しておく必要があります。初期化しない場合、要素の取得や変更はシンタックスエラーとなります。

例:

 C_COLLECTION($colVar) // コレクション型の変数の宣言
$colVar:=New collection // コレクションの初期化と変数への代入

通常コレクションと共有コレクション

二種類のコレクションを作成することができます:

  • New collection コマンドを使用して作成する通常 (非共有) コレクション。 通常のコレクションは特別なアクセスコントロールをせずに編集可能ですが、プロセス間で共有することはできません。
  • New shared collection コマンドを使用して作成する共有コレクション。 共有コレクションはプロセス間 (プリエンティブ・スレッド含む) で共有可能なコレクションです。 共有コレクションへのアクセスは Use...End use 構造によって管理されます。 詳細な情報については、共有オブジェクトと共有コレクション を参照ください。

コレクションメソッド

4D コレクションへの参照は、コレクションの メンバーメソッド と呼ばれる特別なメソッドを利用することができます。 オブジェクト記法によって、これらのメソッドは以下のシンタックスを使用することでコレクション参照に対して適用することが可能です:

{$result:=}myCollection.memberMethod( {params} )

引数がなくても、メンバーメソッドは必ず小カッコ () 付きで呼び出す点に注意してください。そうでない場合にはシンタックスエラーが生成されます。

例:

$newCol:=$col.copy() // $col を $newCol にディープ・コピー
$col.push(10;100) // 10 と 100 をコレクションに追加

一部のメソッドは元のコレクションを変更して返すので、つぎのように連続して呼び出すことが可能です:

 $col:=New collection(5;20)
$col2:=$col.push(10;100).sort() // $col2=[5,10,20,100]

propertyPath 引数

いくつかのコレクションメソッドは引数として propertyPath を受け入れます。 この引数は以下のように用いることができます:

  • オブジェクトプロパティ名、 例えば "lastName"
  • オブジェクトプロパティパス (ドット文字で繋げられたサブプロパティの階層シーケンスなど)。例: "employee.children.firstName"

警告: メソッドに propertyPath 引数を渡す場合、そのプロパティ名には "." (ドット)、"[ ]" (大カッコ)、あるいは " " (スペース) を使えません。これらを使用するとパスを正しく解析できなくなります:

 $vmin:=$col.min("My.special.property") // undefined
$vmin:=$col.min(["My.special.property"]) // エラー