Vai al contenuto
eLearner.app
Modulo 4 · Lezione 3 di 415/32 nel corso~12 min
Lezioni del modulo (3/4)

Parametri di default e rest

JavaScript ti permette di rendere i parametri opzionali (con un valore di default) e di accettare un numero variabile di argomenti con il rest operator (...).

Parametri di default

JS
function saluta(nome, prefisso = 'Ciao') {
  return `${prefisso}, ${nome}!`;
}

saluta('Anna'); // 'Ciao, Anna!'
saluta('Marco', 'Buongiorno'); // 'Buongiorno, Marco!'

Il default si applica solo quando l'argomento è undefined (compreso il caso "non passato"). Per null o 0 il default non scatta:

JS
function f(x = 10) {
  return x;
}
f(); // 10
f(undefined); // 10
f(null); // null
f(0); // 0

Rest: ...nomi

Per accettare un numero variabile di argomenti, raccoglili in un array con ...:

JS
function somma(...numeri) {
  let totale = 0;
  for (const n of numeri) totale += n;
  return totale;
}

somma(); // 0
somma(5); // 5
somma(1, 2, 3, 4); // 10

Dentro la funzione, numeri è un vero array (non l'oggetto magico arguments delle vecchie function).

Il rest deve essere l'ultimo parametro:

JS
function f(primo, ...altri) {
  /* ok */
}
// function f(...altri, ultimo) {} // SyntaxError

Spread in chiamata

L'altra faccia di ... è l'operatore spread, che "esplode" un array in argomenti separati al momento della chiamata:

JS
function somma(a, b, c) {
  return a + b + c;
}

const nums = [1, 2, 3];
somma(...nums); // 6, equivalente a somma(1, 2, 3)

Prova tu

Esercizio#js.m4.l3.e1
Tentativi: 0Caricamento…

Definisci una function `sum(a, b)` dove `b` ha valore di default 0. Devi farla passare gli assert: sum(5) === 5, sum(2, 3) === 5, sum(0) === 0.

Caricamento editor…
Mostra suggerimento

function sum(a, b = 0) { return a + b; }

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#js.m4.l3.e2
Tentativi: 0Caricamento…

Definisci una function `mean(...nums)` che restituisca la media aritmetica dei suoi argomenti, o 0 se non gliene passi nessuno.

Caricamento editor…
Mostra suggerimento

Se nums.length è 0, return 0; altrimenti somma e dividi.

Soluzione disponibile dopo 3 tentativi