Перейти к содержимому

Обработка ошибок в Rust, наконец-то наглядно (полный курс)

Rust It Over

0:00 / 0:00

Обработка ошибок в Rust, наконец-то наглядно (полный курс)

919 просмотров · 1 мес. назад
Rust It Over
731 подписчик
919 просмотров · 1 мес. назад
Каждый новичок уже знает три лозунга об обработке ошибок в Rust — «никогда не используйте unwrap», «вопросительный знак просто разворачивает код», «в Rust нет исключений» — и каждый из них наполовину неверен. Этот фильм развенчивает все три, глава за главой, с реальным выводом компилятора и панической ошибкой. 16 глав, построенных вокруг одного вопроса, задаваемого каждой строке: является ли эта ошибка возвращаемым значением или ошибкой, на которой следует остановиться? Что вы усвоите: · Даже «42» возвращается в обернутом виде: parse никогда не возвращает число, он возвращает Result — и собственное решение rustc заключается в том, чтобы развернуть его, вызывая панику при Err. · Option отвечает на вопрос «есть ли здесь что-то?», а None не требует объяснения; Result отвечает на вопрос «сработало ли это?», а Err содержит причину, которая может различать типы ошибок. · • Функция `match` обрабатывает обе ветви обработки; если `let` обрабатывает одну и игнорирует другую, `let-else` сохраняет значение и заставляет другую ветвь покинуть функцию — это показано реальным выводом терминала, а не просто описанием. • Паника — это не сбой: при стратегии размотки стека по умолчанию она выводит сообщение, запускает деструкторы в обратном порядке, а затем завершает работу с кодом 101 — и завершает только поток, в котором это произошло, а не всегда всю программу. • Утверждение «Никогда не используйте unwrap» неверно так же, как и «всегда используйте unwrap»: это утверждение верно, когда сбой означает ошибку в вашем собственном коде, и неверно, когда пользователь может его вызвать. • Аргумент `unwrap_or` оценивается каждый раз, даже на пути, где он не нужен — `unwrap_or_else` вызывает свою функцию только тогда, когда действительно требуется значение по умолчанию. • Вопросительный знак — это совпадение плюс возврат — при ошибке Err он возвращается из объемлющей функции, а на обратном пути обрабатывает ошибку с помощью From, что в этом фильме показано в действии, а не просто как сбой компиляции. • Box‹dyn Error› позволяет вопросительному знаку распространять несвязанные типы ошибок без каких-либо преобразований, выполненных вручную. • Функция main может возвращать Result: при ошибке Err она выводит "Error:" плюс отладочную форму ошибки и завершает работу с кодом 1 — не панику и не 101. • Функция collect на итераторе Results сохраняет первую ошибку и останавливается — последующие элементы даже не оцениваются. Разделы: 0:00 Даже "42" возвращается в обертке 1:16 Никто ничего не говорит. Err объясняет почему. 2:16 Три способа открыть результат 3:09 Паника устраняет последствия до того, как исчезнет 4:24 Функция unwrap работает, когда сбой означает ошибку 5:26 Комбинаторы — это железнодорожные стрелки 6:13 Резервный вариант, за который вы все равно заплатили 7:22 Вопросительный знак — это совпадение и возврат 8:23 Вопросительный знак не перейдет из варианта в результат 9:22 Вопросительный знак преобразует — только на красном пути 10:25 Одна ячейка, содержащая любую ошибку 11:18 Что выводит main при сбое 12:11 Ошибка может содержать ошибку, которая ее вызвала 13:06 thiserror для библиотек, в любом случае для приложений 14:14 collect останавливается на первой ошибке 15:04 Ошибки — это значения. Паника — это ошибки. Каждый фрагмент кода в этом видео был скомпилирован и запущен на rustc 1.98.0 (версия 2021 года) во время его написания. Каждая ошибка компилятора, сообщение о панике и код завершения на экране — это реальный вывод, а не имитация. В главе 14 также зафиксированы anyhow 1.0.104 и thiserror 2.0.20 — два крейта от одного автора, Дэвида Толнея. Новичок в Rust? Начните здесь: ▶ Визуализация владения и заимствования в Rust:    • Rust Ownership & Borrowing, Finally Visual...   Больше визуализации Rust: ▶ Визуализация параллельного программирования в Rust: https://www.youtube.com/@RustItOver/v... Логотип Rust © Rust Foundation, CC-BY 4.0, изменен. — Rust, визуализация. Без лишних деталей, без лишнего. — ▶ Подпишитесь: https://www.youtube.com/@RustItOver?s... 🦀 Тик Ток:   / rust.it.over   #rust #rustlang #обработка ошибок