Nové praktické funkce pro sbírky!

Automaticky přeloženo z Deepl

Funkce spojené s kolekcemi byly zavedeny ve verzi 4D v16 R6 a vyvinuly se s možností používat pro některé z nich vzorce, například map() nebo reduce(). 4D v20 přináší další funkce, které jsou stejně praktické a které zde představíme.

Vzorová databáze

First() a last()

Dvě funkce, first() a last(), jak naznačují jejich názvy, umožňují přístup k prvnímu a poslednímu prvku kolekce. Na rozdíl od použití indexů a závorek (col[0], col[col.length-1]) nehrozí chyba, pokud je kolekce prázdná. V takovém případě je hodnota undefined bude jednoduše vrácena funkcemi.

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

AT()

Adresa at() je také alternativou hranatých závorek (col[x]) s výhodou; hodnota může být záporná, aby se získaly položky od konce.
Stejně jako funkce first() a last() bude v případě prázdné kolekce nebo přetečení indexu vrácena nedefinovaná hodnota (bez chyby).

$first:=MyCollection.at(0)
$second:=MyCollection.at(1)
$third:=MyCollection.at(2) // might be undefined if collection contains only two items
$last:=MyCollection.at(-1)

Dobrá zpráva: . at() je k dispozici také pro výběry entit!
Jediný rozdíl je v tom, že funkce vrací hodnotu Null místo undefined, pokud je výběr entit prázdný (nebo v případě přetečení indexu).

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

Flat()

Na adrese flat() je inovativnější a v některých případech bude velmi užitečná. Umožňuje zploštění kolekcí, které mohou obsahovat kolekce (které mohou obsahovat i kolekce apod.).

Ve výchozím nastavení se počet úrovní původní kolekce sníží o jednu. Některé kolekce tedy mohou ve výsledku zůstat. Funkce však přijímá parametr, který to kompenzuje.

$flatCollection:=$nestedCollection.flat()    // might still contain collections
$flatCollection:=$nestedCollection.flat(MAXLONG) // all included collections will be flatten

Výsledek (před / po)

includes()

Adresa includes() je užitečná, protože umožňuje zjistit, zda kolekce obsahuje ten či onen prvek téměř libovolného typu… text, číslo, datum… a dokonce i odkazy na objekty nebo kolekce.

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

reduceRight()

Funkci reduce() již znáte, umožňuje automaticky iterovat kolekci a získat jedinečný výsledek libovolného typu: Řetězec, číselná hodnota…

Tato funkce umožňuje stejný styl výpočtů, ale prohledává kolekci zprava doleva (tj. začíná od konce). V závislosti na typu operace mohou být výsledky zcela odlišné.

Shrnuto a podtrženo, reduceRight() je optimalizovaným ekvivalentem funkce reverse().reduce()

flatmap()

Na adrese map() umožňuje (od verze 4Dv16 R6) vytvořit kolekci na základě obsahu jiné kolekce. Na adrese flatMap() funkce nám umožňuje provést v rámci jedné operace tzv. map() následovanou operací flat() – funkci, o které jsme se zmínili dříve.

Jedná se tedy o optimalizovaný ekvivalent funkce map().flat()

Závěr

Tyto nové funkce, z nichž některé jsou inspirovány jazykem JavaScript, doplňují rozsáhlé kolekce funkcí, které jsou již ve 4D přítomny. Budou vám nápomocny při vývoji.

Neváhejte si o nich popovídat na fóru 4D!

Roland Lannuzel
- Product Owner & 4D Expert - Po studiu elektroniky se Roland věnoval průmyslovým IT jako vývojář a konzultant, který vytvářel řešení pro zákazníky s různými databázemi a technologiemi. Koncem 80. let se zamiloval do 4D a používal jej při psaní podnikových aplikací, které zahrnovaly účetní, fakturační a e-mailové systémy. nakonec se připojil ke společnosti v roce 1997 a Rolandův cenný přínos zahrnuje návrh specifikací, testovacích nástrojů, demoverzí a také školení a přednášky pro komunitu 4D na mnoha konferencích. Nadále aktivně utváří budoucnost 4D definováním nových funkcí a nástrojů pro vývoj databází.