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.
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!