Обработка ошибок

Возникновение ошибок в ходе выполнения программ — это суровая реальность жизни. В Rust есть ряд функций для обработки ситуаций, когда что-то идёт не так. Во многих случаях Rust требует, чтобы вы признали возможность ошибки и предприняли некоторые действия, прежде чем ваш код будет скомпилирован. Это требование делает вашу программу более надёжной, гарантируя, что вы обнаружите ошибки и обработаете их надлежащим образом, прежде чем дадите код конечным пользователям!

В Rust ошибки формируют две основные группы: исправимые и неисправимые. В случае исправимой ошибки, такой как file not found, мы, скорее всего, просто хотим сообщить о проблеме пользователю и повторить операцию. Неисправимые ошибки всегда являются симптомами дефектов программы: например, попытка доступа к элементу за пределами границ массива, которая вынуждает нас немедленно остановить программу.

Большинство языков не различают эти два вида ошибок и обрабатывают их одинаково, используя такие механизмы, как исключения. В Rust нет исключений. В качестве альтернативы в нём есть тип Result<T, E> (для исправимых ошибок) и макрос panic!, который останавливает исполнение, когда программа встречает неисправимую ошибку. Сначала речь пойдёт про вызов макроса panic!, а потом — о возврате значений Result<T, E>. Кроме того, мы рассмотрим, что нужно учитывать при принятии решения о том, следует ли попытаться исправить ошибку или остановить исполнение.