Lecciones del módulo (1/2)
Condicionales y bucles
El control del flujo en Rust gira en torno a dos constructores principales: expresiones condicionales para decidir qué camino tomar y constructores cíclicos para repetir instrucciones.
Condicionales: if como Expresión
In Rust, la instrucción if es una expresión, lo que significa que devuelve un valor. Podemos usar if para asignar directamente un valor a una variable:
let condition = true;
let number = if condition { 5 } else { 6 }; // if/else come espressione
Bucles e Iteraciones
Rust proporciona tres tipos de bucles nativos: loop, while y for.
1. loop (Bucle Infinito)
La palabra clave loop crea un bucle infinito que continúa hasta que le indicas explícitamente que se detenga con break:
let mut count = 0;
loop {
count += 1;
if count == 10 {
break; // Esce dal ciclo
}
}
Además, puedes devolver un valor desde un loop colocándolo justo después de break:
let result = loop {
count += 1;
if count == 10 {
break count * 2; // Restituisce 20
}
};
2. while (Bucle Condicional)
Ejecuta un bloque de código mientras una condición booleana siga siendo verdadera:
let mut number = 3;
while number != 0 {
println!("{}!", number);
number -= 1;
}
3. for (Iteración sobre Colecciones y Rangos)
El bucle for es la herramienta más común y segura para recorrer elementos de una colección o rangos de números:
// Itera sui numeri da 1 a 3 (escluso il 4)
for number in 1..4 {
println!("Valore: {}", number);
}
// Itera includendo l'estremo destro usando '='
for number in 1..=3 {
println!("Valore: {}", number); // Stampa 1, 2 e 3
}
Etiquetas para Bucles (Loop Labels)
En caso de bucles anidados, las instrucciones break y continue se refieren por defecto al bucle más interno. Rust permite aplicar una etiqueta a un bucle (escrita como 'nombre_etiqueta:) para poder interrumpir o continuar explícitamente un bucle más externo:
let mut count = 0;
'outer: loop {
loop {
if count == 5 {
break 'outer; // Esce direttamente dal loop esterno
}
count += 1;
}
}
Pruébalo tú
Declara una variable llamada number con el valor 7. Luego usa una expresión if/else para asignar a la variable message el valor 'greater' si number es mayor que 5, o 'smaller' en caso contrario. Por último, imprime message con println!.
Mostrar pista
Escribe `let message = if number > 5 { 'greater' } else { 'smaller' };` y pásala a `println!`.
Solución disponible después de 3 intentos
Escribe un bucle for que imprima los números del 1 al 5 inclusive (es decir, 1, 2, 3, 4, 5) usando println! en cada iteración.
Mostrar pista
Usa la sintaxis del rango inclusivo `for i in 1..=5` y ejecuta `println!('{}', i);` en el bloque.
Solución disponible después de 3 intentos
Escribe un bucle loop que incremente una variable mutable counter comenzando desde 0. Cuando counter llegue al valor 10, sal del bucle devolviendo counter multiplicado por 5 mediante la instrucción break para asignar este valor a una variable inmutable result. Por último, imprime result.
Mostrar pista
Usa `let result = loop { ... };`. Dentro del bucle incrementa `counter` e inserta la condición `if counter == 10 { break counter * 5; }`.
Solución disponible después de 3 intentos