Die mit Collections verbundenen Funktionen wurden mit 4D v16 R6 eingeführt und haben sich mit der Möglichkeit, Formeln für einige von ihnen zu verwenden, wie map() oder reduce(), weiterentwickelt. 4D v20 bringt weitere, ebenso praktische Funktionen mit, die wir hier vorstellen.
FIRST() und LAST()
Die beiden Funktionen, first() und last()erlauben, wie ihr Name schon sagt, den Zugriff auf das erste und das letzte Element einer Sammlung. Anders als bei der Verwendung von Indizes und Klammern (col[0], col[col.length-1]) besteht kein Fehlerrisiko, wenn die Sammlung leer ist. In diesem Fall wird der Wert undefined einfach von den Funktionen zurückgegeben werden.
$first:=MyCollection.first()
$last:=MyCollection.last()
AT()
Die Funktion at() Funktion ist ebenfalls eine Alternative zu eckigen Klammern (col[x]) mit einem Vorteil: Der Wert kann negativ sein, um die Elemente vom Ende her zu erhalten.
Wie bei den Funktionen first() und last() wird im Falle einer leeren Sammlung oder eines Indexüberlaufs der undefinierte Wert (ohne Fehler) zurückgegeben.
$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)
Gute Nachrichten: Die at() Funktion ist auch für Entity-Selectionen verfügbar!
Der einzige Unterschied besteht darin, dass die Funktion Null statt undefiniert zurückgibt, wenn die Entitätsauswahl leer ist (oder im Falle eines Indexüberlaufs).
$es:=ds.Info.all()
$title1:=$es.at(0).title
$title2:=$es.at(1).title
$title3:=$es.at(2).title
FlaT()
Die flat() Funktion ist innovativer und wird in einigen Fällen sehr nützlich sein. Sie ermöglicht die Verflachung von Sammlungen, die Sammlungen enthalten können (die auch Sammlungen enthalten können, usw.).
Standardmäßig wird die Anzahl der Ebenen der ursprünglichen Sammlung um eins reduziert. Daher können einige Sammlungen im Ergebnis verbleiben. Die Funktion akzeptiert jedoch einen Parameter, um dies auszugleichen.
$flatCollection:=$nestedCollection.flat() // might still contain collections
$flatCollection:=$nestedCollection.flat(MAXLONG) // all included collections will be flatten
Ergebnis (Vorher/Nachher)
INCLUDES()
Die Funktion includes() Funktion ist praktisch, weil sie es ermöglicht, festzustellen, ob eine Sammlung dieses oder jenes Element fast jeden Typs enthält… Text, numerisch, Datum… und sogar Referenzen von Objekten oder Sammlungen.
$result:=colorsCol.includes("blue")
$result:=valuesCol.includes(10)
$result:=objectsCol.includes(myObjectRef)
reduceRight()
Sie kennen bereits die Funktion reduce(), die es Ihnen ermöglicht, eine Collection automatisch zu iterieren, um ein eindeutiges Ergebnis beliebigen Typs zu erhalten: Eine Zeichenkette, ein numerischer Wert…
Diese Funktion ermöglicht dieselbe Art von Berechnungen, durchsucht die Collection jedoch von rechts nach links (d. h. vom Ende her). Je nach Art der Operation können die Ergebnisse sehr unterschiedlich ausfallen.
Zusammengefasst, reduceRight() ist das optimierte Äquivalent zu reverse().reduce()
flatmap()
Die Funktion map() Funktion ermöglicht es (seit Version 4Dv16 R6), eine Collection auf der Grundlage des Inhalts einer anderen Collection zu erstellen. Die Funktion flatMap() Funktion erlaubt es uns, in einer einzigen Operation eine map() gefolgt von einer flat() – eine Funktion, die wir bereits erwähnt haben.
Sie ist daher das optimierte Äquivalent der Funktion map().flat()
Schlussfolgerung
Diese neuen Funktionen, von denen einige von JavaScript inspiriert sind, vervollständigen die große Collection von Funktionen, die bereits in 4D vorhanden sind. Sie werden Ihnen bei der Entwicklung behilflich sein.
Zögern Sie nicht, im 4D Forum darüber zu sprechen!