Vai al contenuto
eLearner.app
Modulo 2 · Lezione 1 di 23/14 nel corso~12 min
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:

Code
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:

Code
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:

Code
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:

Code
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:

Code
// 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:

Code
let mut count = 0;
'outer: loop {
    loop {
        if count == 5 {
            break 'outer; // Esce direttamente dal loop esterno
        }
        count += 1;
    }
}

Prova tu

Esercizio#rust.m2.l1.e1
Tentativi: 0Caricamento…

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!.

Caricamento editor…
Mostra suggerimento

Scrivi `let message = if number > 5 { 'greater' } else { 'smaller' };` e passala a `println!`.

Soluzione disponibile dopo 3 tentativi

Esercizio#rust.m2.l1.e2
Tentativi: 0Caricamento…

Scrivi un ciclo for che stampa i numeri da 1 a 5 inclusi (quindi 1, 2, 3, 4, 5) usando println! ad ogni iterazione.

Caricamento editor…
Mostra suggerimento

Usa la sintassi del range inclusivo `for i in 1..=5` ed esegui `println!('{}', i);` nel blocco.

Soluzione disponibile dopo 3 tentativi

Esercizio#rust.m2.l1.e3
Tentativi: 0Caricamento…

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.

Caricamento editor…
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