Controllo del flusso

Espressioni condizionali

Come in ogni linguaggio di programmazione, Rust supporta l'esecuzione condizionale di codice sulla base di una condizione.

fn main() {
    let x = 4;

    if x > 5 {
        println!("x è maggiore di 5");
    } else {
        println!{"x è minore o uguale di 5"};
    }
}

Compilando ed eseguendo il codice sopra otteniamo il risultato

x è minore o uguale di 5

Il tipo di una condizione deve essere necessariamente un booleano, a differenza di altri linguaggi come javascript o Python che convertono implicitamente i valori a booleani. Possiamo avere anche catene di condizioni tramite il costrutto else if

fn main() {
    let x = 4;

    if x > 5 {
        println!("x è maggiore di 5");
    } else if x > 3 {
        println!{"x è minore o uguale di 5 ma maggiore di 3"};
    } else {
        println!{"x è minore o uguale di 3"};
    }
}

Eseguendo il codice sopra otteniamo questo risultato

x è minore o uguale di 5 ma maggiore di 3

Cicli

Il costrutto loop permette di creare un ciclo infinito in Rust:

fn main() {
    loop {
        println!("loop!");
    }
}

Se proviamo a eseguire questo programma vedremo che verrà stampata la stringa loop! all'infinito, o almeno fino a che non terminiamo il programma in maniera esplicita.

$ cargo run
   Compiling loops v0.1.0 (./projects/loops)
    Finished dev [unoptimized + debuginfo] target(s) in 0.11s
     Running `target/debug/loops`
loop!
loop!
loop!
...

Possiamo interrompere un ciclo tramite la parola chiave break.

fn main() {
    let mut i = 0;
    loop {
        if i == 4 {
            break;
        }
        println!("loop {i}");
        i += 1;
    }
}

Eseguendo il programma vediamo che alla quarta iterazione il loop viene interrotto.

loop 0
loop 1
loop 2
loop 3
Fine del loop

Il ciclo sopra può essere trasformato in un ciclo while, che si comporta come in molti altri linguaggi.

fn main() {
    let mut i = 0;
    while i <= 4 {
        println!("loop {i}");
        i += 1;
    }
}

Possiamo anche usare il costrutto for per iterare su i membri di una collezione, come ad esempio un array.

fn main() {
    let arr = [1, 2, 3, 4, 5];
    for x in arr {
        println!("il valore è {}", x);
    }
}

Il risultato del programma è quello che ci aspettiamo, ovvero

il valore è 1
il valore è 2
il valore è 3
il valore è 4
il valore è 5