Condicionales
Los condicionales permiten que tu código tome decisiones: ejecutar un bloque u otro dependiendo de si una condición es verdadera o falsa. Sin ellos, todos los programas harían siempre lo mismo.
if, else if, else
La estructura básica:
if (condición) {
// se ejecuta si condición es true
} else if (otraCondición) {
// se ejecuta si la primera es false y esta es true
} else {
// se ejecuta si ninguna condición anterior es true
}
const temperatura = 22;
if (temperatura < 10) {
console.log('Hace frío, abrígate');
} else if (temperatura < 20) {
console.log('Temperatura fresca');
} else if (temperatura < 30) {
console.log('Temperatura agradable');
} else {
console.log('Hace calor');
}
// → 'Temperatura agradable'
Valores truthy y falsy en condiciones
El if no necesita exactamente true o false — evalúa el valor como booleano:
const nombre = '';
if (nombre) {
console.log(`Hola, ${nombre}`);
} else {
console.log('No hay nombre'); // → esto se ejecuta: '' es falsy
}
const usuario = null;
if (usuario) {
// no se ejecuta: null es falsy
}
const lista = [];
if (lista) {
// SÍ se ejecuta: [] es truthy (aunque esté vacío)
}
Condicional ternario
Para asignaciones simples, el ternario es más compacto:
const edad = 20;
const mensaje = edad >= 18 ? 'Mayor de edad' : 'Menor de edad';
Equivale a:
let mensaje;
if (edad >= 18) {
mensaje = 'Mayor de edad';
} else {
mensaje = 'Menor de edad';
}
switch
El switch evalúa una expresión y la compara contra múltiples valores. Es más legible que una cadena larga de else if cuando comparas la misma variable contra valores concretos:
const dia = 'lunes';
switch (dia) {
case 'lunes':
case 'martes':
case 'miércoles':
case 'jueves':
case 'viernes':
console.log('Día laborable');
break;
case 'sábado':
case 'domingo':
console.log('Fin de semana');
break;
default:
console.log('Día no reconocido');
}
El break es obligatorio
Sin break, la ejecución cae en cascada al siguiente case:
const nota = 'B';
switch (nota) {
case 'A':
console.log('Sobresaliente');
break; // sin esto, continuaría ejecutando los siguientes cases
case 'B':
console.log('Notable');
break;
case 'C':
console.log('Aprobado');
break;
default:
console.log('Suspenso');
}
Patrón de early return
En funciones, en vez de anidar muchos if/else, es más limpio retornar pronto cuando la condición no se cumple:
// ❌ Anidado — difícil de seguir
function procesarPedido(usuario, pedido) {
if (usuario) {
if (pedido) {
if (pedido.items.length > 0) {
return calcularTotal(pedido);
} else {
return 'Pedido vacío';
}
} else {
return 'Sin pedido';
}
} else {
return 'Sin usuario';
}
}
// ✅ Early return — plano y legible
function procesarPedido(usuario, pedido) {
if (!usuario) return 'Sin usuario';
if (!pedido) return 'Sin pedido';
if (pedido.items.length === 0) return 'Pedido vacío';
return calcularTotal(pedido);
}
Object lookup: alternativa al switch
Para mapear valores a resultados, un objeto es más elegante que un switch:
const mensajes = {
exito: '✅ Operación completada',
error: '❌ Algo salió mal',
carga: '⏳ Cargando...',
vacio: 'No hay resultados',
};
const estado = 'exito';
const mensaje = mensajes[estado] ?? 'Estado desconocido';
// → '✅ Operación completada'
En la siguiente lección vemos los bucles: cómo repetir acciones sin escribir el mismo código veinte veces.