Nuove pratiche funzioni per le collezioni!

Tradotto automaticamente da Deepl

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.

Database di esempio

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!

Roland Lannuzel
- Product Owner ed esperto di 4D - Dopo aver studiato elettronica, Roland è passato all'IT industriale come sviluppatore e consulente, realizzando soluzioni per i clienti con una varietà di database e tecnologie. Alla fine degli anni '80 si è innamorato di 4D e lo ha utilizzato per scrivere applicazioni aziendali che includono sistemi di contabilità, fatturazione e posta elettronica. Entrato a far parte dell'azienda nel 1997, Roland ha dato il suo prezioso contributo progettando specifiche, strumenti di test e demo, oltre a formare e parlare alla comunità 4D in occasione di numerose conferenze. Continua a plasmare attivamente il futuro di 4D definendo nuove funzionalità e strumenti di sviluppo di database.