CAP 04 · LEC 03·Funciones
Parámetros y valores por defecto
Los parámetros por defecto eliminan los chequeos manuales de undefined. Combinados con desestructuración hacen las funciones más expresivas y robustas.
¿Encontraste un error o algo que mejorar?Editá esta lección en GitHub →
Parámetros por defecto
ES6 permite asignar un valor por defecto directamente en la firma. Se usa cuando el argumento es undefined o no se pasa.
// Sin defaults (patrón antiguo)
function saludar1(nombre) {
nombre = nombre || "Invitado"; // problema: 0 o "" también activan el fallback
return `Hola, ${nombre}`;
}
// Con defaults (ES6)
function saludar2(nombre = "Invitado") {
return `Hola, ${nombre}`;
}
console.log(saludar2()); // "Hola, Invitado"
console.log(saludar2("Ana")); // "Hola, Ana"
console.log(saludar2(undefined)); // "Hola, Invitado"
console.log(saludar2(null)); // "Hola, null" ← null no activa el default// Sin defaults — TypeScript requiere tipo explícito
function saludar1(nombre: string) {
return `Hola, ${nombre}`;
}
// Con defaults (ES6) — TypeScript infiere: nombre es string
function saludar2(nombre = "Invitado"): string {
return `Hola, ${nombre}`;
}
console.log(saludar2()); // "Hola, Invitado"
console.log(saludar2("Ana")); // "Hola, Ana"
console.log(saludar2(undefined)); // "Hola, Invitado"
// saludar2(null) ← TypeScript lo bloquea: null no es string | undefinedSalida
Hola, Invitado
Hola, Ananull vs undefined
El valor por defecto solo se aplica cuando el argumento es undefined. null no activa el default — null es un valor explícito.
Desestructuración en parámetros
Puedes desestructurar objetos y arrays directamente en la firma de la función:
// Sin desestructuración
function mostrarUsuario1(usuario) {
console.log(usuario.nombre, usuario.edad);
}
// Con desestructuración en parámetro
function mostrarUsuario({ nombre, edad }) {
console.log(nombre, edad);
}
// Con defaults en la desestructuración
function mostrarUsuario2({ nombre = "Sin nombre", edad = 0 } = {}) {
console.log(nombre, edad);
}
mostrarUsuario({ nombre: "Ana", edad: 25 }); // "Ana" 25
mostrarUsuario2(); // "Sin nombre" 0
mostrarUsuario2({ nombre: "Luis" }); // "Luis" 0// Sin desestructuración — tipo inline
function mostrarUsuario1(usuario: { nombre: string; edad: number }): void {
console.log(usuario.nombre, usuario.edad);
}
// Con desestructuración en parámetro
function mostrarUsuario({ nombre, edad }: { nombre: string; edad: number }): void {
console.log(nombre, edad);
}
// Con defaults en la desestructuración
function mostrarUsuario2({ nombre = "Sin nombre", edad = 0 }: { nombre?: string; edad?: number } = {}): void {
console.log(nombre, edad);
}
mostrarUsuario({ nombre: "Ana", edad: 25 }); // "Ana" 25
mostrarUsuario2(); // "Sin nombre" 0
mostrarUsuario2({ nombre: "Luis" }); // "Luis" 0Salida
Ana 25
Sin nombre 0Orden de parámetros con defaults
Los parámetros con defaults deben ir al final. Si van antes, hay que pasar undefined para saltarlos, lo que es confuso:
// ❌ Default al inicio — necesita undefined para saltarlo
function mal(separador = ", ", a, b) {
return a + separador + b;
}
mal(undefined, "Ana", "Luis"); // "Ana, Luis" (confuso)
// ✅ Defaults al final
function bien(a, b, separador = ", ") {
return a + separador + b;
}
bien("Ana", "Luis"); // "Ana, Luis"
bien("Ana", "Luis", " & "); // "Ana & Luis"