A Rust hibáinak kezelésének egynél több módja van, ezért mindenképpen fontolja meg az összes lehetőséget.

A hibák elkerülhetetlenek, és különféle okok miatt fordulhatnak elő, az érvénytelen felhasználói beviteltől a hálózati hibákig, hardverhibákig vagy programozási hibákig. A hibakezelés az ilyen hibák észlelésének, jelentésének és helyreállításának folyamata a program összeomlásának vagy adatsérülésének megelőzése érdekében.

A hatékony hibakezelés kritikus fontosságú a Rustban. Lehetővé teszi robusztus, megbízható alkalmazások létrehozását, amelyek képesek kezelni a váratlan hibákat és hibákat. A Rust hibakezelő mechanizmusai rugalmas, biztonságos programok fejlesztését teszik lehetővé, amelyek könnyebben karbantarthatók.

A hibák típusai a rozsdában

A Rustnak van egy gazdag típusú rendszere, amelyet használhat szakszerűen kezelje a hibákat, típusuk szerint. A Rust gazdag hibatípusú rendszerének előnyeit a hagyományos hibakezelési megközelítésekkel szemben nem lehet alábecsülni. A hibatípus rendszer biztosítja

instagram viewer
javított típusbiztonság, komponálhatóság, kifejezőkészség és hibakereshetőség.

Íme a Rust gyakori hibatípusainak listája:

  • A std:: io:: Hiba A típus olyan I/O hibákat jelöl, mint például a fájl nem található, az engedély megtagadva vagy a fájl végének elérése.
  • A std:: num:: ParseIntError A típus olyan hibákat jelöl, amelyek a string to integer elemzési műveleteknél fordulnak elő.
  • A std:: option:: NoneError A típus az üres Opciók kicsomagolásából származó hibákat jelöli.
  • A std:: eredmény:: Eredmény type egy általános eredménytípus, amely bármilyen hiba ábrázolására használható.

Minden hibatípusnak megvannak a saját módszerei és sajátosságai az adott módon történő kezeléshez.

Íme egy példa a Rust hibakezelésére egy fájlolvasási művelethez:

használat std:: fs:: Fájl;
használat std:: io:: Olvasás;

fnread_file(pálya: &str) -> Eredmény<Húr, std:: io:: Hiba> {
hagyjamut file = Fájl:: megnyitás (elérési út)?;
hagyjamut tartalom = Húr::új();
file.read_to_string(&mut tartalom)?;
Rendben(tartalom)
}

A read_file függvény beolvassa a megadott elérési úton lévő fájl tartalmát, és sztringként adja vissza. Visszaadja a std:: io:: Hiba ha a fájl megnyitási vagy olvasási művelete sikertelen. A ? operátor továbbítja a hibát, és a hibát a Eredmény.

Hibakezelési mechanizmusok rozsdában

Az egyik legfontosabb jellemzője, amely hozzájárul a Rust biztonságához, a hibakezelési mechanizmusok. A Rustban négy fő hibakezelési mechanizmus létezik: a Eredmény típus, a választási lehetőség típus, a pánik! makró, és a Hiba jellemvonás.

Az Eredmény és az Opció típusok strukturált hibakezelést tesznek lehetővé. Használhatod a pánikot! makró a helyrehozhatatlan hibák kezelésére. Az Error jellemzővel egyéni hibatípusokat és egyéni hibakezelést határozhat meg.

Az eredmény típusa

A Eredmény A típus egy beépített típus, amely egy sikertelen művelet eredményét reprezentálja. Két változata van: a Rendben változat, amely a sikert reprezentálja és értéket tartalmaz, ill Téved, amely hibát jelent, és hibaértéket tartalmaz.

A következőképpen használhatja az Eredmény típust egy fájl megnyitásához és tartalmának olvasásához:

használat std:: fs:: Fájl;
használat std:: io:: előjáték::*;

fnread_file(fájl elérési út: &str) -> Eredmény<Húr, std:: io:: Hiba> {
hagyjamut file = Fájl:: megnyitás (file_path)?;
hagyjamut tartalom = Húr::új();
file.read_to_string(&mut tartalom)?;
Rendben(tartalom)
}

fnfő-() {
hagyja eredmény = read_file("fájl.txt");

mérkőzés eredmény {
Rendben(tartalom) => println!("{}", tartalom),
Téved(e) => println!("Hiba: {}", e),
}
}

A read_file függvény beveszi a fájl elérési útját, és visszaadja a Eredmény hiba. Ha a fájl olvasási vagy megnyitási művelete sikertelen, a függvény visszaadja a Téved érték. Ellenkező esetben a függvény a Rendben érték. Ban,-ben fő- funkció, a mérkőzés utasítás kezeli a Eredmény értéket, és a fájlművelet helyzetétől függően kinyomtatja az eredményt.

Az opció típusa

A választási lehetőség A típus egy beépített típus, amely egy érték jelenlétét vagy hiányát jelzi. A választási lehetőség típusnak két változata van. Néhány értéket képvisel, és Egyik sem érték hiányát jelenti.

Íme, hogyan használhatja a választási lehetőség írja be a vektor első elemének lekéréséhez.

fnget_first_elementKlón> (vec: Vec) -> választási lehetőség {
ha vec.is_empty() {
Egyik sem
} más {
Néhány(vec.first().unwrap().clone())
}
}

fnfő-() {
hagyja vec = vec![1, 2, 3];
hagyja eredmény = get_first_element (vec);

mérkőzés eredmény {
Néhány(elem) => println!("{}", elem),
Egyik sem => println!(– A vektor üres.),
}
}

A get_first_element függvény egy választási lehetőség típus. Ha a vektor üres, a függvény visszatér Egyik sem; ellenkező esetben a függvény visszatér Néhány amely a vektor első elemét tartalmazza. Ban,-ben fő- funkció, a mérkőzés utasítás kezeli a választási lehetőség érték. Ha a választási lehetőség -ra értékeli Néhány, a függvény kiírja az első elemet. Ellenkező esetben a függvény egy üzenetet nyomtat, amely jelzi, hogy a vektor üres.

A pánik! Makró

A pánik! makró funkciót biztosít a Rust helyrehozhatatlan hibáinak kezelésére. Híváskor a pánik! makró, hibaüzenetet nyomtat és leállítja a programot.

Íme egy példa a pánik használatára! makró annak jelzésére, hogy egy függvénynek érvénytelen argumentumai vannak.

fnfeloszt(osztalék: f64, osztó: f64) -> f64 {
ha osztó == 0.0 {
pánik!("Az osztó nem lehet nulla.");
}

osztalék / osztó
}

fnfő-() {
hagyja eredmény = oszt(4.0, 0.0);
println!("{}", eredmény);
}

A feloszt a függvény ellenőrzi, hogy az osztó nulla-e; ha az osztó nulla, a függvény meghívja a pánik! makró hibaüzenettel; ellenkező esetben a függvény kiszámítja és visszaadja az eredményt

A fő- függvény érvénytelen argumentumokkal hívja meg az osztás függvényt, hogy elindítsa a pánik! makró.

Íme a hibaüzenet:

A hibajellemző

A Hiba A tulajdonság egy beépített tulajdonság, amely meghatározza a hibatípusok viselkedését. A Hiba A tulajdonság egyéni hibatípusok meghatározásához és egyedi hibakezeléshez nyújt funkcionalitást.

Íme egy példa egy olyan egyéni hibatípus meghatározására, amely a fájl nem található hibát jelöli.

használat std:: hiba:: Hiba;
használat std:: fmt;
használat std:: io:: Olvasás;

#[derive (Debug)]
structFájl nem található(Húr);

impl fmt:: Kijelző számára Fájl nem található {
fnfmt(&maga, f: &mut fmt:: Formázó) -> fmt::Eredmény {
ír!(f, "Fájl nem található: {}", maga.0)
}
}

impl Hiba számára Fájl nem található {}

fnread_file(fájl elérési út: &str) -> Eredmény<Húr, Doboz<dyn Hiba>> {
hagyjamut file = std:: fs:: Fájl:: open (file_path).map_err(|e| FileNotFound(formátum!("{}", e)))?;
hagyjamut tartalom = Húr::új();
file.read_to_string(&mut tartalom)?;
Rendben(tartalom)
}

fnfő-() {
hagyja eredmény = read_file("fájl.txt");

mérkőzés eredmény {
Rendben(tartalom) => println!("{}", tartalom),
Téved(e) => println!("Hiba: {}", e),
}
}

Az egyéni hibatípus a Fájl nem található struct. A típus tartalmaz egy fájl elérési utat, és a Fájl nem található típus valósítja meg a Kijelző vonás felhasználóbarát hibaüzenetek visszaadására és a Hiba jellemvonás, amely jelzi, hogy ez egy hibatípus.

Ban,-ben read_file funkció, a Fájl nem található hibatípus a fájl nem található hibát jelöli, és a map_err metódus az std:: io:: hibát FileNotFound hibává alakítja. Végül, a doboz type lehetővé teszi, hogy a függvény bármely olyan típust visszaadjon, amely megvalósítja az Error tulajdonságot.

A fő- függvény meghívja a read_file függvény a fájl elérési útjával, és ha megtalálja a fájlt, kinyomtatja annak tartalmát a konzolra. Ellenkező esetben kiírja a hibaüzenetet.

Íme egy nem létező fájl eredménye:

Beleegyezhet a Rust tulajdonosi modelljébe a programbiztonság érdekében

A Rust nagyszerű hibakezelési mechanizmusával párosulva a Rust olyan tulajdonosi modellt is használ, amely segít biztosítani, hogy a programjai memóriabiztonságot élvezzenek.

A Rust egy kölcsön-ellenőrzővel biztosítja a tulajdonosi szabályok betartását a fordítási időben, mielőtt a program futna.