Índice

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

  1. Escribe un programa que verifique si un número es positivo, negativo o cero.
  2. Escribe un programa que imprima todos los números pares del 2 al 20.
  3. Escribe un programa FizzBuzz que vaya del 1 al 50.
  4. Escribe un programa que encuentre el primer número mayor a 1000 divisible por 7 y 13.
  5. Escribe un programa que cuente regresivamente del 10 al 1, y luego imprima "¡Despegue!".

Resumen

Siguiente capítulo: Funciones →

← Anterior: Operaciones y expresiones Siguiente: Funciones →