Rust:
Virheiden käsittely
Miten:
Rust käsittelee virheitä kahdella pääasiallisella tavalla: palautettavissa olevat ja palautumattomat virheet. Katsoaanpa molempia.
Palautettavissa olevat virheet käyttävät 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!("Tiedosto avattu onnistuneesti."),
Err(_e) => println!("Tiedoston avaaminen epäonnistui."),
}
}
Tuloste voi olla joko “Tiedosto avattu onnistuneesti.” tai “Tiedoston avaaminen epäonnistui.”, riippuen hello.txt
tiedostostasi.
Palautumattomiin virheisiin käytämme panic!
:
fn main() {
// Tämä aiheuttaa ohjelman kaatumisen, koska tiedosto todennäköisesti ei ole olemassa.
let _f = File::open("nowhere.txt").unwrap();
}
Aja se, ja näet paniikkiviestin. Ohjelmasi pysähtyy kuin seinään.
Syväsukellus
Historiallisesti virheenkäsittely ohjelmoinnissa on ollut sotkuista. Rust saa sen oikein selkeällä erolla palautettavissa olevien ja palautumattomien virheiden välillä.
Result
enum on tarkoitettu palautettavissa oleville virheille. Se on eksplisiittinen – käsittelet Ok
tai Err
variantin. Sinulla on myös metodeja kuten unwrap()
ja expect()
, mutta ne ovat nopeita ja likaisia oikoteitä, jotka voivat johtaa panic!
-tilaan.
panic!
on Rustin tapa huutaa, että jotakin todella pahaa tapahtui, eikä se pysty käsittelemään sitä. Se on kuin palautumaton virhe, joka pysäyttää suorituksen välittömästi. Panikki Rustissa koetaan usein virheinä, joita ei odoteta käsiteltävän, kuten taulukon rajojen ulkopuolelle indeksoinnissa.
Virheenkäsittely Result
-palautuksella on suositeltavaa, kun odotat käsitteleväsi virheitä. Se on idiomaattista Rustia, mikä tarkoittaa, että se on tapa, josta Rust-kehittäjät ovat sopineet. On myös Option<T>
tapauksia varten, kun virhe on vain se, että jokin on None
eikä Some(T)
. On kyse odottamattoman odottamisesta ilman pelkoa.
Vaihtoehtoja? Toki, voisit käyttää muita virheenkäsittelyn kirjastoja saadaksesi lisää ominaisuuksia tai ergonomista käyttöä. Kuten anyhow
yksinkertaiseen virheenkäsittelyyn tai thiserror
kirjastokoodin virheisiin.
Katso myös
Kiinnostunut sukeltamaan syvemmälle? Tässä minne mennä:
- Rust-kirja virheenkäsittelystä - Loistava paikka ymmärtää Rustin virheenkäsittelyn filosofia.
- Rust by Example: Error handling - Interaktiivisia esimerkkejä, jotka saavat sinut tarttumaan toimeen.
Muista, hyvä virheenkäsittely ei ole vain ohjelmointia; se on välittämistä koodisi käyttäjistä. Iloista koodausta!