4. Control del flujo
if
Las llaves son obligatorias; los paréntesis alrededor de la condición, no.
var vida = 2
if vida <= 0 {
print("Fin")
} else if vida == 1 {
print("¡Cuidado!")
} else {
print("Todo bien")
}▶ Probar en el editor
while
var n = 1
while n < 100 {
n *= 2
}
print(n) // 128▶ Probar en el editor
do ... while
Como while, pero la condición se comprueba al final: el bloque se ejecuta al menos una vez. Es lo natural para menús y para pedir un dato hasta que sea válido.
var intentos = 0
do {
intentos += 1
print("Intento", intentos)
} while intentos < 3▶ Probar en el editor
continue salta a comprobar la condición y break sale del bucle. Las variables declaradas dentro del bloque no se ven en la condición (decláralas antes, como intentos).
for con números
for i in a..b cuenta desde a hasta b sin incluirlo; ..= lo incluye; step elige el salto (también negativo).
for i in 0..3 { print("i =", i) }
for i in 1..=3 { print("hasta 3 incluido:", i) }
for i in 10..0 step -5 { print("cuenta atrás:", i) }▶ Probar en el editor
foreach y for con listas
var frutas = ["pera", "uva"]
foreach f in frutas { print(f) }
for i, f in frutas { print(i, f) } // con índice
foreach clave, valor in { a: 1, b: 2 } { print(clave, valor) }
foreach letra in "hola" { print(letra) } // los textos se recorren por caracteres▶ Probar en el editor
repeat
Repite un bloque un número de veces:
repeat 3 { print("¡hola!") }▶ Probar en el editor
break y continue
for i in 0..10 {
if i % 2 == 0 { continue } // salta al siguiente
if i > 6 { break } // sale del bucle
print(i) // 1 3 5
}▶ Probar en el editor
match
match compara un valor con varios casos y devuelve el resultado del primero que encaja. Cada caso puede tener:
- uno o varios valores separados por comas;
- rangos (
1..5,1..=5); - clases o tipos (
is-test implícito al poner una clase); - una guarda
else if condición; - un bloque
{ ... }: su última expresión es el resultado.
function describir(x: number): text {
return match x {
0 => "cero"
1, 2, 3 => "pequeño"
4..10 => "medio"
else if x < 0 => "negativo"
else => "grande"
}
}
print(describir(2), describir(7), describir(-1), describir(50))
var tecla = "space"
var accion = match tecla {
"space" => {
print("¡salto!")
"saltar"
}
"escape" => "salir"
else => "nada"
}
print(accion)▶ Probar en el editor
match también se usa como sentencia, sin aprovechar el resultado:
var estado = "jugando"
match estado {
"menu" => print("Pulsa una tecla")
"jugando" => print("¡A jugar!")
else => print("...")
}▶ Probar en el editor
Con match true se escribe una cadena de condiciones de forma compacta:
var temperatura = 31
print(match true {
temperatura < 0 => "hiela"
temperatura < 25 => "templado"
else => "calor"
})▶ Probar en el editor
HyperEZ