Abby's Digital Cafe

Condicionales y Bucles en Programación

Cuando empiezas a programar, no basta con guardar datos: necesitas decidir qué hacer con ellos y repetir acciones sin escribir lo mismo una y otra vez. Para eso están los condicionales y los bucles. Los condicionales te permiten ejecutar código solo si se cumple una condición; los bucles automatizan repeticiones con una regla clara de fin. Dominar estas estructuras es el paso que convierte "código que funciona" en "código mantenible".

Condicionales: tomar decisiones con if/else

Un condicional evalúa una expresión booleana (verdadero/falso). Si es verdadera, se ejecuta un bloque; si no, otro. Puedes encadenar varias condiciones para cubrir casos más específicos. Mantén tus condiciones simples y con nombres de variables claros para facilitar la lectura.

[python]
edad = 18 if edad >= 18: print("Eres mayor de edad") elif 13 <= edad < 18: print("Eres adolescente") else: print("Eres menor de edad")
[typescript]
let edad = 18; if (edad >= 18) { console.log("Eres mayor de edad"); } else if (edad >= 13) { console.log("Eres adolescente"); } else { console.log("Eres menor de edad"); }

switch (TypeScript) y match-case (Python 3.10+)

Usa switch (o match-case en Python moderno) cuando comparas una misma variable contra varios valores. Mejora la legibilidad frente a muchos if/else anidados.

[typescript]
const dia = 3; // 1=Lunes, 7=Domingo switch (dia) { case 1: case 2: case 3: case 4: case 5: console.log("Día laboral"); break; case 6: case 7: console.log("Fin de semana"); break; default: console.log("Valor inválido"); }
[python]
estado_http = 404 match estado_http: case 200: print("OK") case 201 | 202: print("Creado/Aceptado") case 400 | 404: print("Error de cliente") case 500: print("Error de servidor") case _: print("Estado no manejado")

Bucles: repetir sin copiar y pegar

Los bucles ejecutan un bloque múltiples veces. Con for recorres colecciones; con while repites mientras se cumpla una condición. Define siempre una condición de salida clara para evitar ciclos infinitos.

[python]
for i in range(5): print("Iteración", i) # while: repite hasta que cambie la condición cuenta_atras = 3 while cuenta_atras > 0: print(cuenta_atras) cuenta_atras -= 1 print("¡Despegue!")
[typescript]
// for clásico for (let i = 0; i < 5; i++) { console.log("Iteración", i); } // while: repite mientras haya elementos en cola const cola: number[] = [3, 2, 1]; while (cola.length > 0) { const x = cola.pop(); console.log("Procesando", x); }

do...while y su equivalente en Python

El bucle do...while (presente en JS/TypeScript) siempre ejecuta el cuerpo al menos una vez antes de verificar la condición. Python no tiene do...while, pero se puede simular con while True y break.

[typescript]
let intentos = 0; let exito: boolean; do { intentos++; // Simulamos una operación que puede fallar exito = Math.random() > 0.3; // 70% de éxito (estimación) console.log(`Intento #${intentos}: ${exito ? "OK" : "Fallo"}`); } while (!exito && intentos < 3); console.log(exito ? "Operación completada" : "Se alcanzó el máximo de intentos");
[python]
intentos = 0 exito = False while True: # equivalente a do...while intentos += 1 # Simulación de éxito 70% (estimación) import random exito = random.random() > 0.3 print(f"Intento #{intentos}: {'OK' if exito else 'Fallo'}") if exito or intentos >= 3: break print("Operación completada" if exito else "Se alcanzó el máximo de intentos")

Ejemplo práctico: total del carrito con descuento

Escenario: tienes una lista de productos con precio y cantidad. Recorres el carrito para sumar subtotales y, si el usuario es VIP, aplicas un 10% de descuento (ejemplo). Observa cómo combinamos bucles y condicionales para resolverlo de forma clara.

[typescript]
type Item = { nombre: string; precio: number; cantidad: number }; const carrito: Item[] = [ { nombre: "Teclado", precio: 30, cantidad: 1 }, { nombre: "Mouse", precio: 15, cantidad: 2 }, ]; const esVIP = true; // condición de negocio let total = 0; for (const item of carrito) { total += item.precio * item.cantidad; } if (esVIP) total *= 0.9; // 10% descuento (ejemplo) console.log("Total a pagar:", total.toFixed(2));
[python]
from dataclasses import dataclass @dataclass class Item: nombre: str precio: float cantidad: int carrito = [ Item("Teclado", 30.0, 1), Item("Mouse", 15.0, 2), ] es_vip = True total = 0.0 for it in carrito: total += it.precio * it.cantidad if es_vip: total *= 0.9 # 10% descuento (ejemplo) print(f"Total a pagar: {total:.2f}")

Buenas prácticas rápidas

  • Prefiere nombres de variables que expliquen la intención: esVIP, total, tieneSaldo.
  • Evita condiciones complejas en línea; extrae funciones como tieneDescuento(usuario).
  • Límites y salidas: usa contadores, topes de intentos y validaciones.
  • En switch/match, agrupa casos relacionados y añade un default/_.
  • Documenta casos borde: listas vacías, valores nulos, entradas inválidas.

Preguntas frecuentes

¿Cuándo uso if/else y cuándo switch/match?

Si comparas una variable contra varios valores discretos, switch/match ofrece mejor legibilidad y evita cascadas de else if. Si la condición es compuesta (rangos, múltiples variables), if/else es más flexible.

¿En qué casos conviene while frente a for?

Usa for para recorrer colecciones o rangos conocidos. Elige while cuando no sabes cuántas iteraciones necesitas y dependes de una condición dinámica (por ejemplo, leer de una cola hasta vaciarla o reintentar hasta éxito).

¿Cómo evito bucles infinitos y alto consumo de CPU?

Define una condición de salida clara, pon límites máximos (p. ej., intentos < N), cambia el estado dentro del bucle y, si esperas I/O (como red), añade esperas/tiempos de reintento exponencial controlados. Loguea el progreso para depurar.

¿Puedo mezclar condicionales y bucles sin perder legibilidad?

Sí. Divide responsabilidades: el bucle recorre elementos; dentro, usa funciones pequeñas para validar y decidir (esElegible, calcularPrecio). Así reduces anidación y mantienes el flujo claro.


En resumen, condicionales y bucles son piezas esenciales para cualquier programa. Practica con casos reales (validaciones, cálculos por lotes, reintentos) y prioriza siempre la claridad: condiciones simples, salidas controladas y funciones pequeñas que expresen intención. Así tu código será más seguro, fácil de mantener y listo para crecer.

Comentarios