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

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

В Rust ошибки делятся на две большие группы обрабатываемые (recoverable, которые возможно обработать и затем восстановить работу программы, для них разумно сообщить о проблеме пользователю и повторить операцию) и необрабатываемые (unrecoverable, после которых невозможно восстановить работу программы). Обрабатываемые ошибки случаются, когда, например, файл не найден. К необрабатываемым ошибкам, т.н. дефектам кода, относятся обращения к неверному индексу массива.

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