4D v16 R4 führt eine neue Art von Variablen ein, die Collection genannt wird. Wofür sind diese Variablen gedacht? Wie Objekte oder BLOBs können Sammlungen verwendet werden, um fast jede Art von Variablen-Typen wie Texte, numerische Werte, Boolesche Werte, Objekte und sogar andere Sammlungen zu speichern. Das Gute daran ist, dass alle oben genannten Variablentypen innerhalb derselben Sammlung gemischt werden können, während Arrays immer den gleichen Typ von Elementen enthalten müssen!
Was ist neu?
Es wurden zwei neue Befehle erstellt (C_COLLECTION und New collection). Auf den Inhalt von Sammlungen kann über die Objektnotation zugegriffen und dieser verändert werden. Die Sammlungen können mit Arrays verglichen werden, sind aber vielseitiger, da sie nicht auf einen einzigen Datentyp beschränkt sind.
Die Sammlungen können in Strings umgewandelt werden und Strings können geparst werden, um Sammlungen zu erstellen. Verwenden Sie dazu einfach die bestehenden Befehle JSON Stringify und JSON Parse. Wenn Sie es gewohnt sind, JSON-Arrays zu manipulieren, werden Sie feststellen, dass Sammlungen sehr ähnlich sind. Wenn nicht, werden Sie sich in kürzester Zeit an sie gewöhnen.
Zwei Hauptunterschiede sind zu beachten:
1. Um auf Elemente einer Sammlung zuzugreifen, müssen Sie eckige Klammern [ ] verwenden, und NICHT geschweifte Klammern { }.
2. Die Elemente einer Sammlung beginnen mit dem Index 0, d.h. auf das erste Element kann mit collection[0] zugegriffen werden, anders als bei Arrays, deren erstes Element 1 ist.
Einerseits ermöglichen Arrays (deren Elemente alle vom gleichen Typ sind) eine Speicheroptimierung, so dass sie schnell und effizient sind. Andererseits bieten Sammlungen eine hohe Flexibilität. Wenn also Speicherplatz oder Geschwindigkeit eine Rolle spielen, sollten Sie Arrays verwenden. Wenn Sie einfacher programmieren wollen, verwenden Sie Sammlungen. Sie haben jetzt die Wahl.
Außerdem können Collections in den meisten Fällen genauso verwendet werden wie andere Arten von Variablen in 4D! Sie können als Parameter an Methoden gesendet werden, als Funktionsrückgabe empfangen werden, als lokal oder global deklariert werden, usw.
Beispiele
Hier sind eine Reihe kleiner Beispiele, wie Sammlungen deklariert und verwendet werden können:
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 :="Die Sammlung enthält "+String($n)+" items"