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
Шпаргалка
Используйте .is_some(), чтобы проверить, содержит ли Option значение:
let maybe_score = Some(85);
if maybe_score.is_some() {
println!("We have a score!");
}Используйте .is_none(), чтобы проверить, является ли Option пустым:
if maybe_score.is_none() {
println!("No score available");
}Оба метода возвращают логические значения (true или false).
Попробуйте сами
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Итоги: поиск элемента