Control de flujo
Los programas necesitan tomar decisiones y repetir acciones. El control de flujo es cómo le dices al programa cuándo hacer qué.
if / else — Tomar decisiones
fn main() { let edad: int = 18 if edad >= 18 { print("Puedes votar") } else { print("Todavía no puedes votar") } }
La condición después de if debe ser una expresión booleana. Si es true, se ejecuta el primer bloque. Si es false, se ejecuta el bloque else (si existe).
Múltiples condiciones con else if
fn main() { let nota: int = 85 if nota >= 90 { print("Calificación: A") } else if nota >= 80 { print("Calificación: B") } else if nota >= 70 { print("Calificación: C") } else { print("Calificación: F") } }
Las condiciones se verifican de arriba hacia abajo. La primera que sea true se ejecuta, y las demás se omiten.
Combinar condiciones
fn main() { let edad: int = 25 let tiene_licencia: bool = true if edad >= 16 and tiene_licencia { print("Puedes conducir") } let es_fin_de_semana: bool = true let es_feriado: bool = false if es_fin_de_semana or es_feriado { print("¡Día libre!") } }
Evaluación en cortocircuito: and y or usan evaluación en cortocircuito. Con and, si el lado izquierdo es false, el lado derecho nunca se evalúa. Con or, si el lado izquierdo es true, el lado derecho se omite. Esto es seguro para proteger expresiones:
if i < arr.length() and arr[i] == objetivo { // arr[i] solo se accede si i está dentro de los límites }
while — Repetir acciones
Un bucle while repite un bloque de código mientras una condición sea true:
fn main() { var contador: int = 1 while contador <= 5 { print(contador) contador += 1 } // Imprime: 1, 2, 3, 4, 5 }
Cuidado: si la condición nunca se vuelve false, el bucle corre para siempre (un "bucle infinito"). Siempre asegúrate de que algo dentro del bucle cambie la condición.
Patrón común: contar
fn main() { var i: int = 0 while i < 10 { print(i) i += 1 } }
Patrón común: acumular
fn main() { // Sumar números del 1 al 100 var suma: int = 0 var i: int = 1 while i <= 100 { suma += i i += 1 } print(suma) // 5050 }
break y continue
break sale del bucle inmediatamente:
fn main() { var i: int = 0 while i < 100 { if i == 5 { break } print(i) i += 1 } // Imprime: 0, 1, 2, 3, 4 }
continue salta el resto de la iteración actual y pasa a la siguiente:
fn main() { var i: int = 0 while i < 10 { i += 1 if i % 2 == 0 { continue // saltar números pares } print(i) } // Imprime: 1, 3, 5, 7, 9 }
Anidamiento
Puedes poner if dentro de while, while dentro de if, y cualquier otra combinación:
fn main() { var i: int = 1 while i <= 20 { if i % 3 == 0 and i % 5 == 0 { print("FizzBuzz") } else if i % 3 == 0 { print("Fizz") } else if i % 5 == 0 { print("Buzz") } else { print(i) } i += 1 } }
Este es el clásico problema "FizzBuzz" — un ejercicio común de programación.
Ejercicios
- Escribe un programa que verifique si un número es positivo, negativo o cero.
- Escribe un programa que imprima todos los números pares del 2 al 20.
- Escribe un programa FizzBuzz que vaya del 1 al 50.
- Escribe un programa que encuentre el primer número mayor a 1000 divisible por 7 y 13.
- Escribe un programa que cuente regresivamente del 10 al 1, y luego imprima "¡Despegue!".
Resumen
if/else if/elsepara decisiones.whilepara repetición.breaksale de un bucle.continuesalta a la siguiente iteración.- Las condiciones deben ser expresiones booleanas.
- Siempre asegúrate de que los bucles while eventualmente terminen.
Siguiente capítulo: Funciones →