Saltar al contenido principal
eLearner.app
Módulo 4 · Lección 3 de 415/32 en el curso~12 min
Lecciones del módulo (3/4)

Parámetros por defecto y rest

JavaScript te permite hacer que los parámetros sean opcionales (con un valor por defecto) y aceptar un número variable de argumentos con el operador rest (...).

Parámetros por defecto

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

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

El valor por defecto solo se aplica cuando el argumento es undefined (incluido el caso de "no pasado"). Para null o 0 el valor por defecto no se activa:

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

Rest: ...nomi

Para aceptar un número variable de argumentos, recógelos en 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 de la función, numeri es un array real (no el objeto mágico arguments de las funciones antiguas).

El rest debe ser el último parámetro:

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

Spread en la llamada

La otra cara de ... es el operador spread, que "descompone" un array en argumentos separados en el momento de la llamada:

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

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

Pruébalo tú mismo

Ejercicio#js.m4.l3.e1
Intentos: 0Cargando...

Define una función `sum(a, b)` donde `b` tenga un valor por defecto de 0. Debe pasar las aserciones: sum(5) === 5, sum(2, 3) === 5, sum(0) === 0.

Cargando editor...
Mostrar pista

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

Solución disponible después de 3 intentos

Ejercicio de repaso

Ejercicio#js.m4.l3.e2
Intentos: 0Cargando...

Define una función `mean(...nums)` que devuelva la media aritmética de sus argumentos, o 0 si no se le pasa ninguno.

Cargando editor...
Mostrar pista

Si nums.length es 0, return 0; de lo contrario, suma y divide.

Solución disponible después de 3 intentos