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
Попробуйте сами
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Итоги: поиск элементаПотренируйтесь самостоятельно: Онлайн-компилятор Rust