Lección 27: Parámetros por Defecto y Rest Parameters
🧠 Concepto
Section titled “🧠 Concepto”ES6 introdujo dos características poderosas para trabajar con parámetros de funciones: parámetros por defecto y rest parameters.
Parámetros por defecto
Section titled “Parámetros por defecto”Permiten asignar valores predeterminados a parámetros que no se pasan o son undefined:
function saludar(nombre = 'Invitado') { return `Hola, ${nombre}`;}
console.log(saludar()); // "Hola, Invitado"console.log(saludar('Carlos')); // "Hola, Carlos"Rest parameters (...args)
Section titled “Rest parameters (...args)”Agrupan el resto de argumentos en un array:
function sumarTodos(...numeros) { return numeros.reduce((total, n) => total + n, 0);}
console.log(sumarTodos(1, 2, 3, 4)); // 10El objeto arguments
Section titled “El objeto arguments”Es un objeto array-like disponible solo en funciones tradicionales (no arrow) que contiene todos los argumentos pasados:
function mostrarArgumentos() { console.log(arguments);}
mostrarArgumentos(1, 'hola', true); // [Arguments] { '0': 1, '1': 'hola', '2': true }💻 Ejemplo
Section titled “💻 Ejemplo”// Parámetros por defecto con objetosfunction configurar({ tamaño = 'mediano', color = 'azul', material = 'plástico' } = {}) { return `Configuración: ${tamaño}, ${color}, ${material}`;}
console.log(configurar({ color: 'rojo' })); // "Configuración: mediano, rojo, plástico"console.log(configurar()); // "Configuración: mediano, azul, plástico"
// Rest parameters con otros parámetrosfunction registrar(usuario, ...habilidades) { console.log(`${usuario} tiene habilidades: ${habilidades.join(', ')}`);}
registrar('Ana', 'JS', 'Python', 'Diseño'); // "Ana tiene habilidades: JS, Python, Diseño"⚠️ Nota
Section titled “⚠️ Nota”Los parámetros por defecto solo se aplican cuando el argumento es undefined, no cuando es null:
function test(x = 'default') { console.log(x);}test(undefined); // "default"test(null); // null (no se aplica el default)El objeto arguments no está disponible en arrow functions. Si necesitas algo similar, usa rest parameters.
Los parámetros por defecto se evalúan en el momento de la llamada, no en la definición. Puedes usar funciones como valor por defecto:
function generarId() { return Date.now();}
function crearUsuario(nombre, id = generarId()) { return { nombre, id };}📝 Ejercicio
Section titled “📝 Ejercicio”Escribe una función llamada listarAmigos que reciba un nombre como primer parámetro y una cantidad variable de nombres de amigos usando rest parameters. Debe devolver un string como “Carlos tiene 3 amigos: Ana, Luis, Marta”.
function listarAmigos(nombre, ...amigos) { // Escribe aquí}
console.log(listarAmigos('Carlos', 'Ana', 'Luis', 'Marta'));// "Carlos tiene 3 amigos: Ana, Luis, Marta"