Koutek objektů: snadné sdílení a další dobré zprávy

Automaticky přeloženo z Deepl

Kolikrát jste při pokusu o vložení objektu do sdíleného objektu obdrželi chybu„Nepodporovaný typ hodnoty ve sdíleném objektu„?

Co jste udělali? Napsali jste delší kód, abyste z nevinného objektu udělali sdílený, třeba iterací přes všechny jeho vlastnosti?

Co třeba přenést sdílený objekt z jedné sdílené skupiny do druhé?

Zajímavá věc o objektech: už víte, že je lze použít jako hashovací mapu (systém klíč/hodnota), ale co takhle získat všechny klíče nebo všechny hodnoty pomocí jediného řádku kódu?

Čtěte dál, protože 4D v18 R3 je venku a přináší dobré zprávy!

KOPÍROVÁNÍ sdílených objektů a kolekcí

kopírování objektu jako sdíleného

Na adrese OB Copy() příkaz byl rozšířen o novou volbu, která může mít hodnotu: ck shared

V následujícím příkladu je objekt $person zkopírován jako sdílený objekt do objektu $copy.

Poté můžeme objekt $copy vložit do sdíleného objektu $personsList .

C_OBJECT$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)

$personsList :=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

přiřadit sdílený objekt ze sdílené skupiny jinému objektu.

Na adrese OB Copy() byl také rozšířen o nový parametr: groupWith (což musí být sdílený objekt nebo sdílená kolekce).

Předání parametru groupWith umožňuje umístit kopírovaný objekt do stejné sdílené skupiny jako groupWith.

V následujícím příkladu patří $sharedObj a $sharedColl do dvou různých sdílených skupin.

Nemůžeme vložit $sharedObj do $sharedColl, aniž bychom dostali chybu, ale můžeme snadno zkopírovat $sharedObj do nového objektu patřícího do stejné sdílené skupiny jako $sharedColl.

C_OBJECT($sharedObj;$objCopy)
C_COLLECTION ($sharedColl)

//$sharedObj belongs to a shared group

$sharedObj :=New shared object("příjmení"; "Smith"; "adresa";New shared object("město"; "New York"))

//$sharedColl belongs to another shared group

$sharedColl :=New shared collection(New shared object("příjmení"; "Brown"))

//$objCopy is in the same shared group as $sharedColl

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

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

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

A co sdílené sbírky?

Výše uvedené příklady se týkají příkazu OB Copy() příkazu.

Přesně stejným způsobem byla vylepšena metodacollection.copy() member.

zpracovávat objekt jako hashovací mapu

K dispozici jsou nové příkazy, které usnadňují manipulaci s objektem jako s hashovací mapou. Pokud máte objekty, jejichž názvy vlastností obsahují dynamické údaje, jsou tyto příkazy určeny právě vám!

Vysvětlíme si to na jednom příkladu.

Uvažujme tento objekt $persons obsahující jako název vlastnosti jméno a jako hodnotu vlastnosti věk:

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

Příkaz OB Keys

Tento příkaz vrací názvy vlastností objektu jako kolekci:

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

Příkaz OB Values

Tento příkaz vrací hodnoty vlastností objektu jako kolekci:

ALERT("Věkový průměr je "+String(OB Values($persons).average()))

Příkaz OB Entries

Tento příkaz vrací kolekci objektů s klíčovými vlastnostmi (název vlastnosti) a hodnotou (hodnota vlastnosti):

C_COLLECTION($agesOK)

$agesOK:=OB Entries($persons).query("hodnota>:1";45)
ALERT ("Existují "+String($agesOK.length)+" osoby, které jsou starší 45 let.")
ALERT ("Jejich jména jsou: "+$agesOK.extract("klíč").join("-"))

Použití objektu, jak je uvedeno výše, umožňuje rychlý a přímý přístup k datům, podobně jako při použití indexu.

Je to rychlejší než použití kolekce objektů s vlastnostmi jméno a věk.

Všimněte si také, že tyto příkazy vracejí kolekci. To nám umožňuje používat všechny členské metody dostupné pro kolekce (jako např. average(), query(), …).

Avatar
• Product Owner • Marie-Sophie Landrieu-Yvert se připojila k programovému týmu 4D jako Product Owner v roce 2017. Jako Product Owner má na starosti psaní uživatelských příběhů a jejich převod do funkčních specifikací. Její úlohou je také zajistit, aby implementovaná funkce odpovídala potřebám zákazníka. Marie-Sophie vystudovala inženýrskou školu ESIGELEC a svou kariéru zahájila jako inženýrka v IBM v roce 1995. Podílela se na různých projektech (projekty údržby nebo výstavby) a pracovala jako vývojářka Cobol. Poté pracovala jako UML designer a Java developer. V poslední době byly jejími hlavními rolí analyzovat a psát funkčních požadavky a koordinovat obchodní a vývojové týmy.