オブジェクト・コーナー:簡単な共有とその他のグッドニュース

Deeplからの自動翻訳

オブジェクトを共有オブジェクトに入れようとしたときに、「Not supported value type in a shared object」というエラーが何回出たでしょうか?

あなたはどうしましたか?無実のオブジェクトを共有オブジェクトにするために長いコードを書き、おそらくそのすべてのプロパティを繰り返し処理しましたか?

共有オブジェクトをある共有グループから別の共有グループに転送するのはどうでしょうか?

オブジェクトの面白いところは、ハッシュマップ(キー/バリューシステム)として使えることはすでにご存知でしょう。しかし、1行のコードですべてのキーやすべてのバリューを取得するのはどうでしょうか?

4D v18 R3がリリースされ、良いニュースがもたらされましたので、読み進めてください。

共有オブジェクトとコレクションのCOPY

オブジェクトを共有としてコピーする

また OB Copy()コマンドが改良され、新しいオプションとしてck shared を指定できるようになりました。

以下の例では、$person オブジェクトが共有オブジェクトとして$copy オブジェクトにコピーされています。

そして、$copy オブジェクトを$personsList 共有オブジェクトの中に入れることができます。

C_OBJECT
$personsList

$copy ($person;$copy;$personsList)
C_TEXT ($text)

$text :=Document to text(Get 4D folder(Current resources folder)+"person.txt")
//$person is a standard object $person :=JSON Parse($text)

:=New shared object()//$copy is a shared object
$copy :=OB Copy($person;ck shared)

Use ($personsList)//We can put $copy in $personsList because $copy is a shared object
$personsList ...person:= xml-ph-003

End use

ある共有グループの共有オブジェクトを別の共有グループに割り当てる

コマンドの機能が強化され、新しいパラメータ OB Copy()コマンドは、新しいパラメータgroupWith(これは共有オブジェクトまたは共有コレクションでなければなりません) を受け付けるように改良されました。

groupWithパラメータを渡すと、 コピーしたオブジェクトをgroupWithと同じ共有グルー プに入れることができます。

下の例では、$sharedObj$sharedColl は、2つの別々の共有グループに属しています。

$sharedObj$sharedColl に入れるとエラーが出ますが、$sharedObj$sharedColl と同じ共有グループに属する新しいオブジェクトに簡単にコピーすることができます .

C_OBJECT
$sharedCollNew shared collection
//$objCopy is in the same shared group as $sharedColl
$objCopy($sharedObj;$objCopy)
C_COLLECTION ($sharedColl)

//$sharedObj belongs to a shared group
$sharedObj :=New shared object("lastname"; "Smith"; "address";New shared object("city"; "New York")

//$sharedColl belongs to another shared group

:=New shared object("lastname"; "Brown")

:=OB Copy($sharedObj;ck shared;$sharedColl)

//So we can put $objCopy into $sharedColl without error

Use ($sharedColl)
$sharedColl .push($objCopy)
End use

また、共有コレクションについてはどうでしょうか。

上記の例は OB Copy()コマンドに関連するものです。

collection.copy()メンバーメソッドも全く同じように強化されています。

オブジェクトをハッシュマップとして扱う

オブジェクトをハッシュマップとして扱うことを容易にする新しいコマンドがあります。プロパティ名に動的なデータを含むオブジェクトがある場合、これらのコマンドはあなたのためのものです。

一つの例で説明しましょう。

プロパティ名としてfirstnames、プロパティ値としてageを含む$persons オブジェクトを考えてみましょう。

C_OBJECT // Mary is 30($persons)
$persons :=New object
$persons ["John"]:=42// John is 42
$persons ["Andy"]:=24// Andy is 24
$persons ["Mary"]:=30
$persons ["Paul"]:=50// Paul is 50
$persons ["Fred"]:=51// Fred is 51

OB Keysコマンド

このコマンドは、あるオブジェクトのプロパティ名をコレクションとして返す。

ALERT("There are "+String(OB Keys($persons).length)+" 人")

OB Values コマンド

このコマンドは、オブジェクトのプロパティ値をコレクションとして返す。

ALERT("The age average is "+String(OB Values($persons).average()))

OB Entriesコマンド

このコマンドはキーとなるプロパティ(プロパティ名)と(プロパティ値)を持つオブジェクトのコレクションを返します。

C_COLLECTION($agesOK)

$agesOK:=OB Entries($persons).query("value>:1";45)
ALERT ("There are "+String($agesOK.length)+" persons who are over 45")
ALERT ("Their names are:"+$agesOK.extract("キー").join("-"))

このようにオブジェクトを使うと、インデックスを使うときと同じように、データに素早く直接アクセスできるようになります。

firstnameとageのプロパティを持つオブジェクトのコレクションを使うよりも高速です。

また、それらのコマンドは、コレクションを返すことに注意してください。これにより、コレクションで利用可能なすべてのメンバーメソッド(例えば average(), query(), …).

Avatar
- プロダクトオーナー - Marie-Sophie Landrieu-Yvertは、2017年にプロダクトオーナーとして4Dプロダクトチームに参加しました。プロダクトオーナーとして、彼女はユーザーストーリー(ユーザーが期待する新機能とその使用法)を書き、それを具体的な機能仕様に変換する役割を担っています。また彼女の役割は、実装された機能が顧客のニーズを満たしているかどうかを確認することでもあります。彼女は1995年にESIGELEC Engineering Schoolを卒業し、IBMでエンジニアとしてのキャリアをスタートさせました。様々なプロジェクト(保守や新規のプロジェクト)に参加し、Cobolのデベロッパーとして働きました。その後、UMLデザイナーおよびJavaデベロッパーとして勤務。最近は、機能要件の分析・記述、ビジネスチームと開発チームの調整などを主に担当しています。