Lezioni del modulo (1/2)
Condizionali e cicli
Il controllo del flusso in Rust ruota attorno a due costrutti principali: espressioni condizionali per decidere quale strada intraprendere, e costrutti ciclici per ripetere istruzioni.
Condizionali: if come Espressione
In Rust, l'istruzione if è un'espressione, il che significa che restituisce un valore. Possiamo usare if per assegnare direttamente un valore a una variabile:
let condition = true;
let number = if condition { 5 } else { 6 }; // if/else come espressione
Cicli ed Iterazioni
Rust fornisce tre tipi di cicli nativi: loop, while e for.
1. loop (Ciclo Infinito)
La parola chiave loop crea un ciclo infinito che continua finché non gli dici esplicitamente di fermarsi con break:
let mut count = 0;
loop {
count += 1;
if count == 10 {
break; // Esce dal ciclo
}
}
Inoltre, puoi restituire un valore da un loop mettendolo subito dopo break:
let result = loop {
count += 1;
if count == 10 {
break count * 2; // Restituisce 20
}
};
2. while (Ciclo Condizionale)
Esegue un blocco di codice finché una condizione booleana rimane vera:
let mut number = 3;
while number != 0 {
println!("{}!", number);
number -= 1;
}
3. for (Iterazione su Collezioni e Range)
Il ciclo for è lo strumento più comune e sicuro per scorrere elementi di una collezione o range di numeri:
// 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
}
Etichette per Cicli (Loop Labels)
In caso di cicli annidati, le istruzioni break e continue si riferiscono di default al ciclo più interno. Rust consente di applicare un'etichetta ad un ciclo (scritta come 'nome_etichetta:) per poter interrompere o continuare esplicitamente un ciclo più esterno:
let mut count = 0;
'outer: loop {
loop {
if count == 5 {
break 'outer; // Esce direttamente dal loop esterno
}
count += 1;
}
}
Prova tu
Dichiara una variabile chiamata number con valore 7. Successivamente usa un'espressione if/else per assegnare alla variabile message il valore 'greater' se number è maggiore di 5, oppure 'smaller' in caso contrario. Infine stampa message con println!.
Mostra suggerimento
Scrivi `let message = if number > 5 { 'greater' } else { 'smaller' };` e passala a `println!`.
Soluzione disponibile dopo 3 tentativi
Scrivi un ciclo for che stampa i numeri da 1 a 5 inclusi (quindi 1, 2, 3, 4, 5) usando println! ad ogni iterazione.
Mostra suggerimento
Usa la sintassi del range inclusivo `for i in 1..=5` ed esegui `println!('{}', i);` nel blocco.
Soluzione disponibile dopo 3 tentativi
Scrivi un ciclo loop che incrementa una variabile mutabile counter a partire da 0. Quando counter raggiunge il valore 10, esci dal ciclo restituendo counter moltiplicato per 5 tramite l'istruzione break per assegnare questo valore a una variabile immutabile result. Infine, stampa result.
Mostra suggerimento
Usa `let result = loop { ... };`. All'interno del loop incrementa `counter` e inserisci la condizione `if counter == 10 { break counter * 5; }`.
Soluzione disponibile dopo 3 tentativi