is_ok() и is_err()
Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 44 из 66.
Иногда вам нужно быстро проверить, представляет ли Result успех или ошибку, не извлекая фактические значения. Rust предоставляет для этого два удобных метода: .is_ok() и .is_err().
Оба метода возвращают логическое значение, что делает их идеальными для простых условных проверок. Метод .is_ok() возвращает true, если Result имеет значение Ok, и false, если это Err. Метод .is_err() работает в обратном порядке:
let success: Result = Ok(42);
let failure: Result = Err("Something went wrong");
if success.is_ok() {
println!("Operation succeeded!");
}
if failure.is_err() {
println!("Operation failed!");
}Эти методы особенно полезны, когда вам нужно знать только статус результата, не заботясь о конкретных значениях внутри. В отличие от match, они не поглощают Result, поэтому вы все еще можете использовать его в дальнейшем.
Задание
ЛегкоВы получите два входных значения. Первое значение — это число (в виде строки), а второе — индикатор статуса (success или failure). Создайте Result<i32, &'static str> на основе этого статуса. Если статус равен success, создайте Ok, содержащий распарсенное число. Если статус равен failure, создайте Err с сообщением "Operation failed". Используйте .is_ok() и .is_err(), чтобы проверить статус результата и вывести соответствующее сообщение.
Требования:
- Прочитайте первый ввод (число) и удалите лишние пробелы
- Распарсите первый ввод в тип
i32 - Прочитайте второй ввод (статус) и удалите лишние пробелы
- Создайте переменную типа
Result<i32, &'static str>:- Если статус равен
success, присвойтеOk(parsed_number) - Если статус равен
failure, присвойтеErr("Operation failed")
- Если статус равен
- Используйте
.is_ok(), чтобы проверить, является ли результат успешным:- Если это так, выведите:
Success detected
- Если это так, выведите:
- Используйте
.is_err(), чтобы проверить, является ли результат ошибкой:- Если это так, выведите:
Error detected
- Если это так, выведите:
Ввод:
- Первая строка: Число (например,
42) - Вторая строка: Либо
success, либоfailure
Вывод:
- Если статус
success:Success detected - Если статус
failure:Error detected
Шпаргалка
Rust предоставляет два метода для проверки статуса Result без извлечения его значений:
.is_ok()- возвращаетtrue, еслиResultявляетсяOk, иfalseв противном случае.is_err()- возвращаетtrue, еслиResultявляетсяErr, иfalseв противном случае
let success: Result<i32, &str> = Ok(42);
let failure: Result<i32, &str> = Err("Something went wrong");
if success.is_ok() {
println!("Operation succeeded!");
}
if failure.is_err() {
println!("Operation failed!");
}Эти методы полезны для простых условных проверок, когда вам нужно знать только статус результата. В отличие от match, они не поглощают Result, что позволяет использовать его в дальнейшем.
Попробуйте сами
use std::io;
fn main() {
// Прочитать первый ввод (число)
let mut number_input = String::new();
io::stdin().read_line(&mut number_input).expect("Failed to read line");
let number_input = number_input.trim();
// Преобразовать число в i32
let parsed_number: i32 = number_input.parse().expect("Failed to parse number");
// Прочитать второй ввод (статус)
let mut status = String::new();
io::stdin().read_line(&mut status).expect("Failed to read line");
let status = status.trim();
// TODO: Создать Result<i32, &'static str> на основе статуса
// Если статус "success", создать Ok(parsed_number)
// Если статус "failure", создать Err("Operation failed")
// TODO: Использовать .is_ok() и .is_err(), чтобы проверить результат и вывести соответствующее сообщение
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Продвинутое управление потоком выполнения
Выражение 'match'Сопоставление нескольких значенийСопоставление диапазоновВыражение 'if let'Циклы как выраженияИтоги — Простой парсер команд4Группировка данных с помощью структур
Что такое структура?Обзор структурДоступ к полям структурыИзменяемые структурыСтруктуры как параметры функцийКортежные структурыИтоги: создание структуры Book7Обработка ошибок с помощью 'Result'
Что такое 'Result'?Использование 'match' с 'Result'is_ok() и is_err()Сокращения: unwrap и expectОператор вопросительного знака '?'Парсинг строк в числаИтоги: функция безопасного деления10Замыкания и анонимные функции
Что такое замыкание?Определение простого замыканияЗамыкания с параметрамиЗахват окруженияИтоги: Простое замыкание-сумматор2Введение в векторы
Что такое вектор?Создание вектораДобавление элементов с помощью pushДоступ к элементам вектораИтерация по векторуИзменяемая итерацияУдаление элементовИтоги — Простой счетчик очков5Пары «ключ-значение» в Hash Map
Что такое Hash Map?Создание Hash MapВставка пар «ключ-значение»Доступ к значениямИтерация по Hash MapОбновление значенияУдаление парыИтоги — Счетчик слов8Проект: Простой инвентарь товаров
Настройка проектаДобавление товараПроверка наличияПродажа товараСобираем всё воедино3Список дел в командной строке
Настройка проектаДобавление задачиПросмотр всех задачУдаление задачиИтоговый код6Обработка отсутствия значения с 'Option'
Что такое 'Option'?Использование 'match' с 'Option'is_some() и is_none()Распаковка 'Option'Метод expectЗначение по умолчанию: unwrap_orИтоги: поиск элемента