Neue praktische Funktionen für Collections!

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.

Beispiel-Datenbank

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!

 

Roland Lannuzel
- Product Owner & 4D Experte - Nach seinem Studium der Elektronik arbeitete Roland als Entwickler und Berater in der industriellen IT-Branche, wo er Lösungen für Kunden mit einer Vielzahl von Datenbanken und Technologien entwickelte. In den späten 80er Jahren verliebte er sich in 4D und setzte es bei der Entwicklung von Geschäftsanwendungen wie Buchhaltungs-, Abrechnungs- und E-Mail-Systemen ein. 1997 trat er schließlich in das Unternehmen ein und leistete einen wertvollen Beitrag, indem er Spezifikationen, Testtools und Demos entwarf, Schulungen durchführte und auf vielen Konferenzen für die 4D Community sprach. Er gestaltet die Zukunft von 4D aktiv mit, indem er neue Funktionen und Datenbankentwicklungstools definiert.