Destrutturazione in nodejs, ovvero i 3 puntini, a cosa servono e come si usano

Ho scritto questo piccolo memo a mio e tuo beneficio, perché per tanti che approcciano a linguaggi simili a nodeJS è difficile o comunque ostico capire cosa capperi fa la funzione con i 3 puntini.

Prima di tutto voglio che sappiate che destrutturare è una cosa troppo utile per non usarla, pertanto abbracciala con disinvoltura e con amore.

Prima cosa: cosa fa la destrutturazione?

Quando fai qualcosa del tipo:

const { pippo, pluto, paperino } = { pippo: 1, pluto: 2, paperino: 3 };

Stai essenzialmente “estraendo” delle proprietà da un oggetto e creando delle variabili con i loro valori. In questo caso, sì, stai creando tre variabili:

  • pippo con valore 1
  • pluto con valore 2
  • paperino con valore 3

Queste sono variabili a tutti gli effetti, quindi puoi richiamarle più avanti nel tuo codice.

Destrutturazione con valori predefiniti

Ora, se fai:

const { page = 1, pageSize = 20, cache = 'cache', ...filters } = params;
  • page, pageSize, e cache sono variabili estratte da params, e se params non contiene questi valori, verranno utilizzati i valori predefiniti (1, 20, 'cache').
  • ...filters raccoglie tutte le altre proprietà di params che non sono state esplicitamente estratte.

Così come page, pageSize e cache, potrai usare anche filters come costante da lì in poi disponibile nel tuo codice.

Facciamo un esempio completo:

Supponiamo di avere questo oggetto:

const params = { pippo: 10, pluto: 20, paperino: 30, page: 5 };

Ora facciamo la destrutturazione:

const { page = 1, pageSize = 20, cache = 'cache', ...filters } = params;

Ecco cosa succede:

  • page: Viene preso da params ed è 5.
  • pageSize: Non esiste in params, quindi viene assegnato il valore predefinito 20.
  • cache: Non esiste in params, quindi viene assegnato il valore predefinito 'cache'.
  • filters: Contiene tutte le altre proprietà di params, cioè { pippo: 10, pluto: 20, paperino: 30 }.

Cosa succede a filters?

Dopo la destrutturazione, filters diventa un oggetto che contiene tutto ciò che non è stato esplicitamente estratto. Quindi , le proprietà che non vengono destrutturate (come pippo, pluto, paperino), finiscono in filters.

Risultato:

  • page è 5 (viene preso da params).
  • pageSize è 20 (valore predefinito).
  • cache è 'cache' (valore predefinito).
  • filters è { pippo: 10, pluto: 20, paperino: 30 }.

Quindi, , se usi ...filters, le costanti che hai definito all’inizio, come page, pageSize, e cache, non saranno incluse in filters, ma saranno create come variabili distinte.

Conclusione:

  1. page, pageSize, cache vengono create come variabili a sé stanti, con valori presi da params (o predefiniti se non ci sono).
  2. filters raccoglie tutte le proprietà di params che non sono state estratte (come pippo, pluto, e paperino in questo caso).