Condicionales

Aprende a controlar el flujo de tu código con if, else if, else, switch y el operador ternario en JavaScript.

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.