Home Rhyylen
Contatto
 
 
 
Rust Language
Capitolo 29
Funzioni divergenti

Un breve capitolo lo dedichiamo alle funzioni divergenti che sono funzioni le quali non restituiscono mai un valore e non terminano normalmente. In altre parole, non hanno un valore di ritorno e vengono indicate con il tipo ! (detto "never type" o "tipo mai"). Nella pratica, le funzioni divergenti sono spesso usate per gestire errori gravi, eseguire loop infiniti o arrestare il programma. Non viene pertanto mai restituito il controllo al chiamante e ancor di più si capisce che si tratta di funzioni dall'uso davvero speciale. In questo modo possono essere anche attribuite ad una variabile di qualsiasi tipo.
Esempio classico è il seguente:

  Esempio 29.1
1
2
3
4
5
6
7
fn errore_fatale() -> ! {
    panic!("Errore grave! Il programma termina qui.");
}
fn main() {
    errore_fatale(); // Eseguiamo la funzione che causa un panic
    println!("Questo messaggio non verrà mai stampato.");
}

Questo codice, che come ormai saprete origina un warning a causa della presenza della irraggiungibile riga 6, genera un panic che termina il programma. Un altro esempio può essere invece:

  Esempio 29.2
1
2
3
4
5
6
7
8
fn ciclo_infinito() -> ! {
    loop {
    println!("Sono bloccato in un ciclo infinito!");
    }
}
fn main() {
    ciclo_infinito(); // Il programma entra in un ciclo infinito
}

Questo programma invece continua a mostrare la stringa alla riga 3 finchè non lo interromperete manualmente con le modalità previste dal sistema operativo che state usando (ad esempio il classico CTRL+C)..