Обработка ошибок
Ошибки в программах неизбежны, поэтому в Rust есть ряд средств для ситуаций, когда что-то идёт не так. Во многих случаях Rust требует, чтобы вы признали возможность ошибки и как-то на неё отреагировали, — иначе код не скомпилируется. Это делает программу надёжнее: вы гарантированно обнаружите ошибки и правильно их обработаете ещё до того, как код попадёт в продакшен!
Rust делит ошибки на две большие категории: исправимые и неисправимые. При исправимой ошибке (recoverable error), например файл не найден, скорее всего, достаточно сообщить пользователю о проблеме и повторить операцию. Неисправимые ошибки (unrecoverable errors) — это всегда признак бага, например попытки обратиться за конец массива, и в таких случаях программу нужно немедленно остановить.
Большинство языков не различают эти два вида ошибок и обрабатывают их
одинаково — например, с помощью исключений. В Rust исключений нет. Вместо
них есть тип Result<T, E> для исправимых ошибок и макрос panic!, который
останавливает выполнение, когда программа сталкивается с неисправимой
ошибкой. В этой главе мы сначала разберём вызов panic!, а потом поговорим о
возврате значений Result<T, E>. А ещё обсудим, как решить, пытаться ли
восстановиться после ошибки или остановить выполнение.