Постоји више од једног начина за решавање грешака у Русту, па се побрините да размотрите све опције.

Грешке су неизбежне и могу настати из различитих разлога, од неисправног корисничког уноса до кварова на мрежи, хардверских кварова или програмских грешака. Руковање грешкама је процес откривања, извештавања и опоравка од таквих грешака како би се спречило рушење програма или оштећење података.

Ефикасно руковање грешкама је критично за Руст. Омогућава вам да креирате робусне, поуздане апликације које могу да поднесу неочекиване грешке и кварове. Рустови механизми за руковање грешкама вам омогућавају да развијете отпорне, безбедне програме које је лакше одржавати.

Врсте грешака у Руст-у

Руст има богат систем типова који можете користити вешто поступати са грешкама, према њиховим врстама. Предности Рустовог богатог система грешака у односу на традиционалне приступе руковању грешкама не могу се потценити. Систем типа грешке обезбеђује побољшана сигурност типа, састављање, експресивност и могућност отклањања грешака.

instagram viewer

Ево листе уобичајених типова грешака у Русту:

  • Тхе стд:: ио:: Грешка тип представља И/О грешке као што је датотека није пронађена, дозвола одбијена или је достигнут крај датотеке.
  • Тхе стд:: нум:: ПарсеИнтЕррор тип представља грешке које се јављају у операцијама рашчлањивања низа до целог броја.
  • Тхе стд:: оптион:: НонеЕррор тип представља грешке од одмотавања празних опција.
  • Тхе стд:: ресулт:: Резултат тип је генерички тип резултата који можете користити за представљање било које грешке.

Сваки тип грешке има свој скуп метода и особина за руковање на одређене начине.

Ево примера руковања грешкама у Русту за операцију читања датотеке:

користити стд:: фс:: Фајл;
користити стд:: ио:: Реад;

фнреад_филе(пут: &стр) -> Резултат<Низ, стд:: ио:: Грешка> {
дозволитимут фајл = Датотека:: отворена (путања)?;
дозволитимут садржај = Низ::Нова();
филе.реад_то_стринг(&мут садржај)?;
Ок(садржај)
}

Тхе реад_филе функција чита садржај датотеке на наведеној путањи и враћа га као стринг. Враћа а стд:: ио:: Грешка ако операција отварања или читања датотеке не успе. Тхе ? оператор шири грешку и враћа грешку као а Резултат.

Механизми за руковање грешкама у Руст-у

Једна кључна карактеристика која доприноси безбедности Руста јесу његови механизми за руковање грешкама. Постоје четири главна механизма за руковање грешкама у Русту: Резултат тип, тхе Опција тип, тхе паника! макро и Грешка особина.

Типови Ресулт и Оптион омогућавају структурисано руковање грешкама. Можете искористити панику! макро за руковање непоправљивим грешкама. Карактеристика Еррор вам омогућава да дефинишете прилагођене типове грешака и прилагођено руковање грешкама.

Тип резултата

Тхе Резултат тип је уграђени тип који представља исход операције која може да не успе. Има две варијанте: Ок варијанта, која представља успех и садржи вредност, и Ерр, који представља грешку и садржи вредност грешке.

Ево како можете да користите тип резултата да отворите датотеку и прочитате њен садржај:

користити стд:: фс:: Фајл;
користити стд:: ио:: прелуде::*;

фнреад_филе(путања_датотеке: &стр) -> Резултат<Низ, стд:: ио:: Грешка> {
дозволитимут фајл = Фајл:: отворен (путања_датотеке)?;
дозволитимут садржај = Низ::Нова();
филе.реад_то_стринг(&мут садржај)?;
Ок(садржај)
}

фнглавни() {
дозволити резултат = реад_филе("филе.ткт");

меч резултат {
Ок(садржај) => принтлн!("{}", садржај),
Ерр(е) => принтлн!(„Грешка: {}“, е),
}
}

Тхе реад_филе функција узима путању датотеке и враћа а Резултат грешка. Ако операција читања или отварања датотеке не успе, функција враћа Ерр вредност. У супротном, функција враћа Ок вредност. У главни функција, тхе меч изјава обрађује Резултат вредност и штампа резултат у зависности од ситуације операције датотеке.

Тип опције

Тхе Опција тип је уграђени тип који представља присуство или одсуство вредности. Тхе Опција тип има две варијанте. Неки представља вредност, и Ниједан представља одсуство вредности.

Ево како можете да користите Опција укуцајте да бисте преузели први елемент вектора.

фнгет_фирст_елементКлон>(вец: Вец) -> Опција {
ако вец.ис_емпти() {
Ниједан
} друго {
Неки(вец.фирст().унврап().цлоне())
}
}

фнглавни() {
дозволити вец = вец![1, 2, 3];
дозволити резултат = гет_фирст_елемент (вец);

меч резултат {
Неки(елемент) => принтлн!("{}", елемент),
Ниједан => принтлн!("Вектор је празан."),
}
}

Тхе гет_фирст_елемент функција враћа ан Опција тип. Ако је вектор празан, функција се враћа Ниједан; у супротном, функција се враћа Неки који садржи први елемент вектора. У главни функција, тхе меч изјава обрађује Опција вредност. Ако је Опција процењује да Неки, функција штампа први елемент. У супротном, функција штампа поруку која указује да је вектор празан.

Паника! Макро

Тхе паника! макро пружа функционалност за руковање непоправљивим грешкама у Русту. Приликом позивања паника! макро, штампа поруку о грешци и прекида програм.

Ево примера коришћења панике! макро који означава да функција има неважеће аргументе.

фнподела(дивиденда: ф64, делилац: ф64) -> ф64 {
ако делилац == 0.0 {
паника!("Делилац не може бити нула.");
}

дивиденда / делилац
}

фнглавни() {
дозволити резултат = подели (4.0, 0.0);
принтлн!("{}", резултат);
}

Тхе подела функција проверава да ли је делилац нула; ако је делилац нула, функција позива паника! макро са поруком о грешци; у супротном, функција израчунава и враћа резултат

Тхе главни функција позива функцију дивиде са неважећим аргументима да би покренула паника! макро.

Ево поруке о грешци:

Тхе Еррор Траит

Тхе Грешка особина је уграђена особина која дефинише понашање типова грешака. Тхе Грешка особина пружа функционалност за дефинисање прилагођених типова грешака и прилагођено руковање грешкама.

Ево примера дефинисања прилагођеног типа грешке који представља грешку да датотека није пронађена.

користити стд:: еррор:: Грешка;
користити стд:: фмт;
користити стд:: ио:: Реад;

#[дериве (Дебуг)]
струцтФајл није пронађен(Низ);

импл фмт:: Приказ за Фајл није пронађен {
фнфмт(&селф, ф: &мут фмт:: Форматер) -> фмт::Резултат {
пиши!(ф, "Фајл није пронађен: {}", селф.0)
}
}

импл Грешка за Фајл није пронађен {}

фнреад_филе(путања_датотеке: &стр) -> Резултат<Низ, Кутија<дин Грешка>> {
дозволитимут филе = стд:: фс:: Филе:: опен (путања_датотеке).мап_ерр(|е| ФилеНотФоунд(формат!("{}", е)))?;
дозволитимут садржај = Низ::Нова();
филе.реад_то_стринг(&мут садржај)?;
Ок(садржај)
}

фнглавни() {
дозволити резултат = реад_филе("филе.ткт");

меч резултат {
Ок(садржај) => принтлн!("{}", садржај),
Ерр(е) => принтлн!(„Грешка: {}“, е),
}
}

Тип прилагођене грешке је Фајл није пронађен струцт. Тип садржи путању датотеке и Фајл није пронађен тип имплементира Приказ особина за враћање порука о грешкама које су прилагођене кориснику и Грешка особина која указује да је ово тип грешке.

У реад_филе функција, тхе Фајл није пронађен тип грешке представља грешку да датотека није пронађена, а мап_ерр метод конвертује грешку стд:: ио:: у грешку ФилеНотФоунд. коначно, кутија типе дозвољава функцији да врати било који тип који имплементира особину Еррор.

Тхе главни функција позива реад_филе функцију са путањом датотеке и, ако пронађе датотеку, штампа њен садржај на конзоли. У супротном, штампа поруку о грешци.

Ево резултата за датотеку која не постоји:

Можете рачунати на Руст-ов модел власништва за сигурност програма

Заједно са Рустовим величанственим механизмом за руковање грешкама, Руст такође користи модел власништва који помаже да се осигура да су ваши програми сигурни у меморију.

Руст обезбеђује правила власништва помоћу провере позајмљивања у време компајлирања пре него што се ваш програм покрене.