Menu
Coddy logo textTech

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, поэтому вы все еще можете использовать его в дальнейшем.

challenge icon

Задание

Легко

Вы получите два входных значения. Первое значение — это число (в виде строки), а второе — индикатор статуса (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(), чтобы проверить результат и вывести соответствующее сообщение
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Logic & Flow

Потренируйтесь самостоятельно: Онлайн-компилятор Rust