is_some() и is_none()
Часть раздела Logic & Flow путешествия по Rust на Coddy. Урок 37 из 66.
Иногда вам нужно проверить, содержит ли Option значение, не извлекая его на самом деле. Rust предоставляет для этого два удобных метода: .is_some() и .is_none().
Оба метода возвращают логическое значение, что делает их идеальными для использования в условиях if:
let maybe_score = Some(85);
if maybe_score.is_some() {
println!("We have a score!");
}
if maybe_score.is_none() {
println!("No score available");
}Метод .is_some() возвращает true, если Option содержит значение Some, и false, если это None. Метод .is_none() работает противоположным образом — он возвращает true для None и false для Some.
Задание
ЛегкоВы получите число на вход. Создайте Option<i32>, который содержит Some(number), если число положительное, или None, если число равно нулю или отрицательное. Используйте .is_some() и .is_none(), чтобы проверить Option и вывести соответствующее сообщение.
Требования:
- Прочитайте входные данные и преобразуйте их в
i32 - Создайте переменную типа
Option<i32>:- Если число положительное (больше 0), присвойте
Some(number) - Если число равно нулю или отрицательное, присвойте
None
- Если число положительное (больше 0), присвойте
- Используйте
.is_some(), чтобы проверить, содержит лиOptionзначение - Если
.is_some()возвращаетtrue, выведите:Positive number detected - Используйте
.is_none(), чтобы проверить, является лиOptionпустым - Если
.is_none()возвращаетtrue, выведите:No positive number
Ввод:
- Одно целое число (например,
42,0или-5)
Вывод:
- Если число положительное:
Positive number detected - Если число равно нулю или отрицательное:
No positive number
Попробуйте сами
use std::io;
fn main() {
// Чтение ввода
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let number: i32 = input.trim().parse().expect("Invalid input");
// TODO: Напишите свой код ниже
// Создайте Option<i32> в зависимости от того, является ли число положительным
// Проверьте, является ли Option значением Some, и выведите соответствующее сообщение
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела 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