Le funzioni associate alle collezioni sono state introdotte con 4D v16 R6 e si sono evolute con la possibilità di utilizzare formule per alcune di esse, come map() o reduce(). 4D v20 porta con sé altre funzioni altrettanto pratiche, che presenteremo qui.
Prima() e ultima()
Le due funzioni, first() e last(), come indicano i loro nomi, consentono di accedere al primo e all’ultimo elemento di un insieme. A differenza dell’uso degli indici e delle parentesi (col[0], col[col.length-1]), non c’è rischio di errore se l’insieme è vuoto. In questo caso, il valore undefined sarà semplicemente restituito dalle funzioni.
$first:=MyCollection.first()
$last:=MyCollection.last()
AT()
La funzione at() è un’alternativa alle parentesi quadre (col[x]) con un vantaggio: il valore può essere negativo per ottenere gli elementi dalla fine.
Come le funzioni first() e last(), il valore indefinito verrà restituito (senza errori) in caso di raccolta vuota o di overflow dell’indice.
$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)
Buone notizie: La funzione at() è disponibile anche per le selezioni di entità!
L’unica differenza è che la funzione restituisce Null invece di undefined quando la selezione di entità è vuota (o in caso di overflow dell’indice).
$es:=ds.Info.all()
$title1:=$es.at(0).title
$title2:=$es.at(1).title
$title3:=$es.at(2).title
Piatto()
La funzione flat() è una funzione più innovativa e sarà molto utile in alcuni casi. Permette di appiattire collezioni che possono contenere collezioni (che possono anche includere collezioni, ecc.).
Per impostazione predefinita, il numero di livelli della collezione originale viene ridotto di uno. Pertanto, alcune collezioni potrebbero rimanere nel risultato. La funzione accetta un parametro per compensare questa situazione.
$flatCollection:=$nestedCollection.flat() // might still contain collections
$flatCollection:=$nestedCollection.flat(MAXLONG) // all included collections will be flatten
Risultato (prima/dopo)
include()
La funzione includes() è utile perché permette di sapere se un insieme contiene questo o quell’elemento di quasi tutti i tipi… testo, numeri, date… e persino riferimenti di oggetti o collezioni.
$result:=colorsCol.includes("blue")
$result:=valuesCol.includes(10)
$result:=objectsCol.includes(myObjectRef)
ridurreDestra()
Conoscete già la funzione reduce(), che consente di iterare automaticamente su un insieme per ottenere un risultato unico di qualsiasi tipo: Una stringa, un valore numerico…
Questa funzione consente lo stesso stile di calcolo, ma esegue una scansione dell’insieme da destra a sinistra (cioè, partendo dalla fine). A seconda del tipo di operazione, i risultati possono essere molto diversi.
In sintesi, reduceRight() è l’equivalente ottimizzato di reverse().reduce()
flatmap()
La funzione map() permette (dalla versione 4Dv16 R6) di creare un insieme basato sul contenuto di un altro insieme. La funzione flatMap() consente di eseguire, in un’unica operazione, un’operazione map() seguita da una flat() – una funzione di cui abbiamo parlato in precedenza.
È quindi l’equivalente ottimizzato della funzione map().flat()
Conclusione
Queste nuove funzioni, alcune delle quali ispirate a JavaScript, completano la vasta collezione di funzioni già presenti in 4D. Saranno fondamentali per il vostro sviluppo.
Non esitate a parlarne sul forum di 4D!