SLIDE 1 / 6

1. Bifurcaciones Excluyentes: if, else if, else

Las ramas if / else if se evalúan en estricto orden descendente. En cuanto una condición resulta verdadera (true), su bloque se ejecuta e inmediatamente se saltan todas las ramas posteriores.

edad < 13 ? "Infantil" edad < 18 ? "Juvenil" "Adulto"
Simulador de Rieles Probá cambiar la edad
16
Rama seleccionada: else if (edad < 18)
Salida por consola: "Categoría Juvenil"

Aunque un adulto de 30 años técnicamente no cumple edad < 13 ni edad < 18, cae en el else por descarte natural.

2. El Operador Ternario: Condicional en una Línea

El operador ternario (? :) es una expresión compacta que devuelve un valor u otro según una condición booleana. A diferencia de un bloque if tradicional, produce un resultado que puede asignarse de inmediato.

saldo >= 0 Condición booleana ? "Al día" : "Deudor" String estado = (saldo >= 0) ? "Al día" : "Deudor";
Laboratorio Ternario
Condición (saldo >= 0): true
Valor asignado a estado: "Al día"

Regla de oro: Usar el operador ternario solo cuando la expresión sea corta y evidente. Si anidás ternarios (? : dentro de ? :), el código se vuelve ilegible.

3. switch Clásico (Fall-through) vs switch Moderno (->)

En el switch clásico, olvidar un break provoca la caída en cascada (*fall-through*), ejecutando los casos siguientes por error. Java 14 introdujo la sintaxis con flecha (->) que erradica este bug por diseño.

Clásico (con peligro de olvido) case 1: msg = "Uno"; // ¡FALTA BREAK! case 2: msg = "Dos"; break; Si entra al 1, ejecuta el 2 también msg queda como "Dos" Moderno Java 14+ (Flechas) case 1 -> "Uno"; case 2 -> "Dos"; default -> "Otro"; ✓ Sin fall-through Retorna valor directamente
Demostración de Fall-Through
Entrada evaluada: dia = 1 (Lunes)
Resultado final de msg: "Martes" (¡Sobreescrito!)

Al no tener break, el flujo continuó hacia el case 2 sobreescribiendo el valor "Lunes". En código moderno con -> cada rama es totalmente aislada.

4. El Reloj de 4 Tiempos del Bucle for

Un bucle for no ejecuta todo al mismo tiempo. Sigue un compás estricto: 1. Inicialización (una sola vez), 2. Chequeo de condición, 3. Ejecución del cuerpo, 4. Incremento. Luego vuelve al paso 2.

1. int i = 0; (Solo 1 vez al inicio) 2. ¿i < 3? Si true sigue; si false sale 3. Cuerpo del bucle println(i) 4. i++ Incrementa y vuelve a 2
Paso a Paso del Reloj Paso 1 / 12
Fase activa: 1. Inicialización (int i = 0)
Valor de i: 0
Consola impresa: []

Presioná "Avanzar Tic" para ver la aguja del reloj recorrer las 4 estaciones de cada ciclo.

5. while vs do-while: ¿Dónde está el molinete?

En un while tradicional, la condición se comprueba antes de entrar: si es falsa de inicio, el cuerpo puede ejecutarse 0 veces. En un do-while, el cuerpo se ejecuta primero y la condición se comprueba al final: garantiza al menos 1 ejecución.

while (condicion) 🚪 Molinete en la ENTRADA Si condicion == false de entrada: → Se ejecuta 0 VECES while (!archivo.fin()) { ... } do { ... } while (condicion); Entra primero y ejecuta el cuerpo 🚪 Molinete en la SALIDA → Garantiza al menos 1 VEZ Ideal para menús de usuario
Comparador en Vivo condicion = false
Iteraciones ejecutadas: 0
Uso recomendado: Lectura de flujos, sockets, buffers

Al ser la condición falsa antes de iniciar, el bucle while no se ejecuta ni una sola vez.

6. Interrupción de Bucles: break vs continue

break finaliza abruptamente la totalidad del bucle y salta a la siguiente instrucción fuera de él. continue omite únicamente el resto de la iteración en curso y avanza de inmediato al siguiente ciclo.

1 2 3 4 5 break en i == 3: Cancela el bucle entero. Imprime: [1, 2] continue en i == 3: Solo esquiva el 3 y sigue. Imprime: [1, 2, 4, 5]

Resumen de Control de Flujo

  • if / else if: Evaluación secuencial excluyente; solo entra a una rama.
  • switch con flechas (->): Elimina por completo la trampa del fall-through sin requerir break.
  • for de 4 tiempos: Init (1) -> Condición (2) -> Cuerpo (3) -> Incremento (4).
  • do-while: Revisión en la puerta de salida; garantiza al menos una ejecución.