Rust:
Gestione degli errori
Come fare:
Rust gestisce gli errori in due modi principali: errori recuperabili e non recuperabili. Vediamoli entrambi.
Gli errori recuperabili utilizzano Result<T, E>:
use std::fs::File;
fn open_file(filename: &str) -> Result<File, std::io::Error> {
let f = File::open(filename);
match f {
Ok(file) => Ok(file),
Err(e) => Err(e),
}
}
fn main() {
match open_file("hello.txt") {
Ok(_file) => println!("File aperto con successo."),
Err(_e) => println!("Apertura del file fallita."),
}
}L’output potrebbe essere “File aperto con successo.” o “Apertura del file fallita.”, a seconda del tuo hello.txt.
Per gli errori non recuperabili, usiamo panic!:
fn main() {
// Questo causerà il panic del programma perché probabilmente il file non esiste.
let _f = File::open("nowhere.txt").unwrap();
}Eseguilo, e vedrai un messaggio di panic. Il tuo programma si ferma all’istante.
Approfondimento
Storicamente, la gestione degli errori nella programmazione è stata complicata. Rust la rende chiara con una distinzione netta tra errori recuperabili e non recuperabili.
L’enum Result è per gli errori recuperabili. È esplicito - gestisci la variante Ok o Err. Hai anche metodi come unwrap() ed expect(), ma sono scorciatoie veloci e sporche che possono portare a un panic!.
panic! è il modo in cui Rust esprime che qualcosa di davvero brutto è successo e non può farci nulla. È come un errore non recuperabile che ferma immediatamente l’esecuzione. Un panic in Rust è spesso associato a bug che non ti aspetti di gestire, come l’indicizzazione fuori dai limiti di un array.
La gestione degli errori tramite il ritorno di Result è preferita quando ci si aspetta di dover gestire degli errori. È idiomatico in Rust, il che significa che è il modo in cui gli sviluppatori di Rust hanno concordato di fare le cose. Esiste anche Option<T>, per i casi in cui un errore è semplicemente qualcosa che è None invece di Some(T). Si tratta di aspettarsi l’inaspettato senza paura.
Alternative? Certo, potresti usare altri crate di gestione degli errori per più funzionalità o uso ergonomico. Come anyhow per una gestione degli errori semplice, o thiserror per gli errori nel codice di librerie.
Vedi Anche
Interessato ad approfondire? Ecco dove andare:
- Il Libro di Rust sulla Gestione degli Errori - Un ottimo punto di partenza per comprendere la filosofia di Rust nella gestione degli errori.
- Rust per Esempio: Gestione degli errori - Esempi interattivi per mettere le mani in pasta.
Ricorda, una buona gestione degli errori non è solo codificare; è prendersi cura degli utenti del tuo codice. Buona programmazione!