4D v16 R4 zavádí nový typ proměnné s názvem Collection. K čemu jsou tyto proměnné určeny? Stejně jako objekty nebo BLOBy mohou být kolekce použity k uložení téměř všech typů proměnných, jako jsou texty, čísla, booleany, objekty a dokonce i jiné kolekce. Dobré je, že všechny tyto dříve zmíněné typy proměnných lze uvnitř jedné kolekce míchat, přičemž pole musí vždy obsahovat stejný typ prvků!
Co je nového?
Byly vytvořeny dva nové příkazy (C_COLLECTION a New collection). K obsahu kolekcí lze přistupovat a upravovat je pomocí objektového zápisu. Kolekce lze přirovnat k polím, ale jsou mnohem univerzálnější, protože nejsou omezeny pouze na jeden typ dat.
Kolekce lze řetězit a řetězce lze analyzovat a vytvářet z nich kolekce. K tomu stačí použít existující příkazy JSON Stringify a JSON Parse. Pokud jste zvyklí manipulovat s poli JSON, zjistíte, že kolekce jsou velmi podobné. Pokud ne, zvyknete si na ně ve velmi krátké době.
Je třeba si všimnout dvou hlavních rozdílů:
1. Pro přístup k položkám kolekce musíte používat hranaté závorky [ ], a NE kudrnaté závorky { }.
2. Prvky kolekce začínají na indexu 0. K prvnímu prvku tedy přistupujete zápisem collection[0], což je rozdíl oproti polím, jejichž první prvek je 1.
Na jedné straně pole (jejichž prvky jsou všechny stejného typu) umožňují optimalizaci paměti, takže jsou rychlá a efektivní. Na druhé straně kolekce poskytují vysokou flexibilitu. Pokud tedy záleží na paměti nebo rychlosti, použijte pole. Pokud chcete kódovat jednodušeji, použijte kolekce. Nyní máte na výběr.
Kromě toho lze kolekce ve většině případů používat stejně jako jiné typy proměnných ve 4D! Lze je posílat jako parametry metodám, přijímat jako návraty funkcí, deklarovat jako lokální nebo globální atd.
Příklady
Zde je sada malých příkladů, jak lze kolekce deklarovat a používat:
C_COLLECTION(myCollection)
col1 := New collection(12;14; "zoulou";45)
col2 := New collection(50; "bravo";col1;Current date)
col3 := New collection(col1;col2)
$obj:=New Object("val"; "Echo")
col := New collection(12; "alpha";$obj;True)
vNum :=col[0] // Access first element of the collection
vString :=col[1]
obj :=col[2]
bool :=col[3]
$n:=col.length // This is the way to know the number of items of a collection!
vString :="Kolekce obsahuje "+String($n)+" položky".