Home Rhyylen
Contatto
 
 
 
Rust Language
Capitolo 19
While

Il primo dei comandi di iterazione che incontriamo è il ben noto, nel mondo della programmazione while. Il format a livello sintattico è molto semplice:

while condizione {
  istruzioni
}

nel quale il blocco di istruzioni viene iterato fintantochè la condizione è verificata. Se la condizione è sempre verificata ovviamente abbiamo un ciclo infinito. Esempio semplicissimo:

  Esempio 19.1
1
2
3
4
5
6
7
fn main() {
    let mut x = 0;
    while x < 5 {
        println!("ciao");
        x = x + 1;
    }
}
 
che stampa 5 volte a video la stringa "ciao". Fondamentale è la riga 5 che incrementa la variabile x. Senza tale incremento l'iterazione introdotta dal while non avrebbe fine. Il valore di x alla fine sarà 5 e la variabile ancora riutilizzabile. Se proprio volete un ciclo infinito allora potete fare una cosa poco elegante come segue:

while true {
istruzioni da ripetere
}

oppure leggere il prossimo paragrafo.

Anche while è una espressione ma emette come risultato un poco utile (). Il seguente esempio completa quanto finora detto:

  Esempio 19.2
1
2
3
4
5
6
7
8
9
fn main() {
    let mut x = 0;
    let y = while x < 3 {
        println!("ciao");
        x = x + 1;
    };
    println!("{}", x);
    println!("{:?}", y);
}

noterete come sempre il punto e virgola alla fine della riga 6, perchè let è una assegnazione. L'output:

ciao
ciao
ciao
3
()

Corredo interessante delle iterazioni, in generale, sono le istruzioni break e continue che,  rispettivamente interrompono l'esecuzione del ciclo e saltano una iterazione. Vediamo un esempio con entrambe queste istruzioni di "rottura":

  Esempio 19.3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
fn main()
{
    let mut x = 0;
    while x < 10
    {
        x = x + 1;
        if x == 2
        {
            continue;
        }
        println!("{}", x);
        if x == 7
        {
            break;
        }
    }
}

che presenta questo output:

1
3
4
5
6
7

Privo del numero 2, a seguito del if che inizia alla riga 7 e che si ferma al numero 7, come previsto dal break all'interno del if che inizia alla riga 12. Non è da sottovalutare l'uso di break e continue, nei vostri programmi troverete abbastanza utili queste istruzioni.
Anche while è utilizzabile nel contesto while - let. Qui l'esempio è un po' più complicato e sarà più chiaro quando avremo appreso altri concetti:

  Esempio 19.4
1
2
3
4
5
6
7
8
9
10
11
fn main() {
    let mut numeri = vec![1, 2, 3, 4, 5].into_iter();

    while let Some(numero) = numeri.next() {
    if numero == 3 {
        println!("Trovato il 3! Interrompo il ciclo.");
        break;
        }
    println!("Numero corrente: {}", numero);
    }
}

In pratica è data una sequenza (vettore) di numeri con un iteratore. L'iterazione while si muove all'interno della sequenza grazie all'iteratore stesso e se trova il numero 3 ferma l'esecuzione, diversamente espone a video il numero corrente.
Non è possibile invece usare l'iterazione while con i range, che vedremo nei prossimi paragrafi cosa sono. Nel capitolo dedicato specificatamente ai range vedremo un escamotage per aggirare anche questo problema.