4D v16 R4 では、 Collection と呼ばれる新しいタイプの変数が導入されました。これらの変数は何を意図しているのでしょうか?オブジェクトやBLOBのように、コレクションはテキスト、数値、ブーリアン、オブジェクト、そして他のコレクションなど、ほとんどすべての種類の変数を保持するために使用することができます。配列は常に同じ型の要素を含まなければなりませんが、コレクションでは、先に述べたすべての変数型を混在させることができるのです。
新機能は?
2つの新しいコマンドが作成されました(C_COLLECTIONと New collection).オブジェクト記法を使って、コレクションの内容にアクセスしたり、変更したりすることができます。コレクションは配列と比較することができますが、1種類のデータだけに制限されないので、より汎用性があります。
コレクションは文字列化することができ、文字列を解析してコレクションを作成することができます。これを行うには、既存のコマンドであるJSON Stringify とJSON Parse を使用するだけです。JSON配列の操作に慣れている人は、コレクションが非常に似ていることに気づくでしょう。そうでなくても、すぐに慣れるでしょう。
主な相違点は2つあります。
1.1. コレクションのアイテムにアクセスするには、角括弧 [ ] を使用する必要があり、中括弧{ } は使用 しない。
2.コレクションは0から始まるので、collection[0]と書くと最初のアイテムにアクセスすることができます。
一方、配列は(要素がすべて同じ型であるため)メモリの最適化が可能であり、高速かつ効率的である。一方、コレクションは高い柔軟性を備えています。つまり、メモリや速度を重視するのであれば、配列を使えばいい。より簡単にコーディングしたいのであれば、コレクションを使う。選択肢が増えたわけだ。
さらに、ほとんどの場合、コレクションは4Dの他のタイプの変数と同じように使うことができます。メソッドのパラメータとして送ったり、関数の戻り値として受け取ったり、ローカルまたはグローバルとして宣言したり、などなど。
例題
コレクションをどのように宣言し、使用するかについて、いくつかの例を挙げてみましょう。
C_COLLECTION(myCollection)
)
col1 :=New collection(12;14; "zoulou";45)
col2 :=New collection(50; "bravo";col1;Current date)
col3 :=New collection(col1;col2
$obj
bool:=New Object("val"; "Echo")
col :=New collection(12; "alpha";$obj;True)
vNum :=col[0]// Access first element of the collection vString :=col[1]
obj :=col[2]
:=col[3]
$n:=col.Length // This is the way to know the number of items of a collection!
)
vString :="The collection contains "+String($n)+" items"