#howtodev - JavaScript parte 6 - parametri REST

Scritto da il
Redatto da
javascript
nodejs

← Articolo precedente: funzioni

→ Articolo successivo: funzioni note

← Articolo SPREAD vs REST

Molto odiato, almeno quanto è usato, JavaScript è alla base dello sviluppo web e di molte applicazioni lato desktop.

Vediamo ora alcune delle funzioni più utilizzate già messe a disposizione da JavaScript.

Obiettivi

Lista degli obiettivi che a fine articolo il lettore consegue:

  • Scrivere ed utilizzare i parametri REST delle funzioni

Prerequisiti

Per la comprensione di questo articolo è necessaria la lettura del precedente articolo sulle Funzioni

Ma si consiglia e ci saranno riferimenti anche agli articoli successivi. É consigliato leggere i precedenti articoli di cui la prima parte, inoltre si consiglia il seguente approfondimento sulla differenza tra SPREAD e REST operators.

I parametri REST

Alle funzioni si possono applicare delle variabili chiamate parametri. Queste variabili come si è notato, possono cambiare il flusso delle operazioni.

Ma quante variabili si possono inserire nell’intestazione di un metodo? letteralmente infinite, se si usano i parametri REST.

Cosa sono i parametri REST

Quando non si può sapere in anticipo quanti parametri verranno utilizzati in ingresso ad un metodo i parametri REST trasformano i parametri in un vettore che poi si può scorrere durante il corpo del metodo. Il vettore verrà idenificato nel corpo del metodo come un unica variabile.

Come si utilizzano i parametri REST

Per utilizzarli, basta scrivere nell’intestazione del metodo tre caratteri punto prima del nome della variabile:

function testREST(...parametri){
	/*corpo della funzione*/
}

All’interno di quella funzione è adesso possibile utilizzare la variabile “parametri” come se fosse un vettore, al suo interno ci saranno tutte le variabili passate in input al metodo.

Ad esempio si può pensare di stamparne il valore

function testREST (...parametri){
	for (let parametro of parametri){
		console.log(parametro)
	}
}

Si può ora richiamare passando un numero arbitrario di parametri:

function testREST (...parametri){
	for (let parametro of parametri){
		console.log(parametro)
	}
}

testREST("ciao",3,"AAAAA",13.3)

Il risultato sarà la stampa di tutti i parametri:

ciao
3
AAAAA
13.3

REST e altri parametri

Potrebbe essere non scontato immaginare che oltre i parametri REST possano esserci, a patto di seguire alcune regole, altri parametri. Questo potrebbe essere utile per identificare un determinato parametro da una lista.

Ad esempio, immaginando di fare un carrello della spesa, potrebbe essere intelligente calcolare il conto separando il nome del proprietario del carrello:

function contoCarrello (proprietario, ...carrello){
	let somma=0;
	for (let prodotto of carrello){
		somma+=prodotto
	}

	console.log("Il conto del signor " + proprietario + " è di " + somma + "euro")
}

Per testarlo si può poi scrivere:

function contoCarrello (proprietario, ...carrello){
	let somma=0;
	for (let prodotto of carrello){
		somma+=prodotto
	}

	console.log("Il conto del signor " + proprietario + " è di " + somma + " euro")
}

contoCarrello("Davide",3,0.99,2.99,12,5,3.80)

Il risultato sarà

Il conto del signor Davide è di 27.78 euro

Regole di implementazione REST parameters

Quali sono le regole per poter mettere più parametri oltre i REST? in realtà son semplici:

  • Il parametro REST deve essere sempre l’ultimo parametro.
  • Ci può essere solo un parametro REST

Queste due regole servono a JavaScript per tracciare una linea di confine tra parametri REST e non.

Un esempio errato di implementazione alla luce di tutto ciò potrebbe essere quello di scrivere il proprietario del carrello alla fine del carrello stesso:

function contoCarrello ( ...carrello,proprietario){
	let somma=0;
	for (let prodotto of carrello){
		somma+=prodotto
	}

	console.log("Il conto del signor " + proprietario + " è di " + somma + "euro")
}

Questa scrittura porterebbe infatti ad un errore di questo genere:

SyntaxError: Rest parameter must be last formal parameter

REST o vettore

Creare un parametro REST o mettere come ultimo parametro un vettore è la stessa cosa dal punto di vista funzionale, l’esempio del conto potrebbe essere rivisto come segue:

function contoCarrello (proprietario, carrello){
	let somma=0;
	for (let prodotto of carrello){
		somma+=prodotto
	}

	console.log("Il conto del signor " + proprietario + " è di " + somma + " euro")
}

contoCarrello("Davide",[3,0.99,2.99,12,5,3.80])

Il risultato è lo stesso, tuttavia richiamando il metodo è stato necessario utilizzare le parentesi quadre, allo scopo di racchiudere il vettore da utilizzare come parametro.

La sintassi è più restrittiva e meno elegante, ma funziona.

ATTENZIONE:

Al contrario di quello che succede in altri linguaggi, se la firma del metodo contiene un parametro REST, non è conveniente passare un vettore intero come parametro in input, JavaScript non lo muta in una lista di parametri ma penserà che l’intero vettore è solo uno dei parametri REST.

history_edu Revisioni