4D v16 R6には、コレクションを管理するための40以上のメソッドがあり、開発者としては、より簡単になってきています。コードがきれいになり、読みやすくなるだけでなく、記録的な速さで書くことができます。
今回のブログでは、この2つの新しいメソッドがどのように使われるかを見ていきます。 queryと indicesを使うと、コレクションを簡単に操作したり、アイテムを取得したりすることができます。
この queryと indicesメソッドは、従来の 4D クエリと同様に、コレクション内の項目を操作したり取得したりするために使用します。両者の動作はまったく同じで、唯一の違いは返される結果です。 queryは、クエリ引数で定義された検索条件に一致するすべてのオブジェクトを含むコレクションを返します。 indices はインデックスのコレクションを返します。
コレクションへの問い合わせには、2 種類の演算子を混ぜることができます。以下のコードサンプルは、何が可能でどのように進めばよいかを示しています。
クエリの書き方は?
最初の例
クエリを書くには、二通りの方法があります。
- クエリを文字列で指定する。
$c:=Newcollection(New object("Id";128; "City"; "Paris"; "Weather";1))
ty”; “New-York”; “Weather”) )
$c.push(New object("Id";50; "City"; "New-York"; "Weather";-10))
$c.Push(New object("Id";50; "Ci$c.push(New object("Id";1792; "City"; "Tokyo"; "Weather";-5))
$c.push(New object("Id";2973; "City"; "Miami"; "Weather";15))
$col:=$c.query("Weather#0")
$col2:=$c.indices("Weather#0")
- とか、プレースホルダーを使ったクエリもあります。このように、ダイナミッククエリを簡単に作成することができ、4Dが変数を変換してくれます。
$w:=$1
$col:=$c.query("Weather#:1";$w)
$col2:=$c.indices("Weather#:1";$w)
高度な例
先ほどの例は、単に構文を示しただけですが、明らかに4つの要素のコレクションから何かを見つけるには、ループで十分でした。メソッドの本当の強みは queryメソッドの本当の強みは、大量のデータを含むオブジェクトやコレクションから何かを見つける必要がある場合です。この queryメソッドは、データにアクセスするための非常に効率的な方法です。
以下の例では、管理者が今日行った操作の回数を簡単に調べることができるようになりました。
// Save the current log file to JSON and put it in a collection
LOG FILE TO JSON("c:\ExportLogs")
$txt :=Document to text("c:\ExportLogs ###JournalExport.json")
$col :=JSON Parse($txt)
// Count how many operations have been done by "Administrator"
$count :=$col.query("extraData.user_name=:1"; "Administrator")といった具合です。length
比較演算子
比較演算子は、 ある式と別の式を比較するために使わ れます。比較の 結果は 、TRUEまたはFALSEになります。比較演算子は次のとおりです。
- =
- #
- <
- >
- <=
- >=
$col:=$c.query("Weather>0")
//$col=[{Id:128,City:Paris,Weather:1},{Id:2973,City:Miami,Weather:15}]
$col2:=$c.indices("Weather>0")
//$col2=[0,3]
論理演算子
論理演算子は、条件の妥当性をテストするために使用されます。比較演算子と同様に、TRUE または FALSE を返します。論理演算子は次のとおりです。
- AND
- OR
$col:=$c.query("Id>50 AND (Weather>10 OR Weather<0)")
//$col=[{Id:1792,City:Tokyo,Weather:-5},{Id:2973,City:Miami,Weather:15}]
$col2:=$c.indices("Id>50と(Weather>10またはWeather<0)")
//$col2=[2,3]となります。