コレクションに便利な関数を追加しました!

コレクションのクラス関数は、4D v16 R6 で導入され、map()reduce() のように、いくつかの関数はフォーミュラを扱えるように進化しました。4D v20 では、同様に実用的な機能がいくつか追加されていますので、ここで紹介します。

HDI: コレクションの操作 v2

first() と last()

関数 first() last() はその名の通り、コレクションの 先頭 最後 の要素へのアクセスを提供します。インデックスと大カッコを使用する記法 (col[0]、col[col.length-1]) と異なり、コレクションが空でもエラーは生成されません。この場合、関数は単純に値 undefined を返します。

$first:=MyCollection.first()
$last:=MyCollection.last()

AT()

at() 関数は、大カッコ記法 (col[x]) の代わりにもなり、その利点は、負の値を指定することで末尾から要素を取得できることです。
first() や last() 関数と同様に、コレクションが空の場合やインデックスが範囲外の場合には、未定義 の値が (エラーなしで) 返されます。

$first:=MyCollection.at(0)
$second:=MyCollection.at(1)
$third:=MyCollection.at(2) // コレクションが 2要素しか格納していない場合には undefined
$last:=MyCollection.at(-1)

朗報です: この at() 関数は、エンティティセレクションでも利用可能です!
唯一の違いは、エンティティセレクションが空の場合 (またはインデックスが範囲外の場合)、関数は undefined ではなく Null を返します。

$es:=ds.Info.all()
$title1:=$es.at(0).title
$title2:=$es.at(1).title
$title3:=$es.at(2).title

Flat()

flat() 関数は、より革新的で、場合によっては非常に便利です。これは、コレクションを格納するコレクション (ネストされたコレクション) を平坦化することができます。

デフォルトでは、元のコレクションの階層は 1 減らされます。そのため、結果にはいくつかのサブコレクションが残る可能性があります。しかし、この関数はこれを補うための引数を受け付けます。

$flatCollection:=$nestedCollection.flat()    // 結果のコレクションは完全に平坦化されていないかもしれません
$flatCollection:=$nestedCollection.flat(MAXLONG) // コレクションのネストは完全に解除されます

結果 (適用前 → 適用後)

includes()

includes() 関数は、テキスト・数値・日付・オブジェクト参照やコレクション参照など、ほとんどすべての型の要素について、コレクションに格納されているかを調べることができます。

$result:=colorsCol.includes("blue")
$result:=valuesCol.includes(10)
$result:=objectsCol.includes(myObjectRef)

reduceRight()

reduce() 関数はコレクションを先頭から末尾へと走査して、文字列や数値など任意の型の 1つの値を結果として出力します。

reduceRight() 関数は、同じように計算しますが、コレクションを右から左に走査します (つまり、最後から始めます)。演算の種類によっては、結果はまったく異なるものになります。

reduceRight() reverse().reduce() を最適化したものと同一とも言えます。

flatmap()

map() 関数は、(4D v16 R6以降) あるコレクションの中身に基づいて、新しいコレクションを作成することができます。flatMap() 関数により、1回の操作で map() に続いて flat() を実行することができます。

flatMap()map().flat() を最適化したものと同一とも言えます。

 

まとめ

これらの新しい関数は、JavaScript にインスパイアされたものもあり、4D がすでに提供している多くのコレクション関数を補完しました。これらは、きっと開発に役立つことでしょう。

4Dフォーラムで、遠慮なく意見をお聞かせください!

 

Roland Lannuzel
- プロダクトオーナー&4Dエキスパート -電子工学を学んだ後、産業用ITの分野で開発者兼コンサルタントとして、さまざまなデータベースやテクノロジーを使って顧客のためのソリューションを構築。80年代後半に4Dに惚れ込み、会計、請求書作成、メールシステムなどのビジネスアプリケーションの作成に4Dを使用してきました。現在も、新機能やデータベース開発ツールの定義など、4Dの未来を積極的に切り開いています。