Итоги: функция безопасного деления
Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 48 из 66.
Задание
ЛегкоВы получите два входных значения. Первое число представляет собой делимое, а второе — делитель. Создайте функцию safe_divide, которая принимает два параметра типа f64 и возвращает Result<f64, &'static str>. Функция должна возвращать Err("Cannot divide by zero"), если делитель равен нулю, и Ok с результатом деления в противном случае. Используйте выражение match для обработки результата и вывода соответствующего сообщения.
Требования:
- Прочитать первый ввод (делимое) и удалить лишние пробелы
- Преобразовать первый ввод в тип
f64 - Прочитать второй ввод (делитель) и удалить лишние пробелы
- Преобразовать второй ввод в тип
f64 - Создать функцию
safe_divide, которая принимает два параметраf64и возвращаетResult<f64, &'static str> - Внутри функции проверить, равен ли делитель
0.0:- Если да, вернуть
Err("Cannot divide by zero") - Если нет, вернуть
Ok(dividend / divisor)
- Если да, вернуть
- Вызвать функцию с двумя полученными числами
- Использовать выражение
matchдля обработкиResult - В ветке
Ok(value)вывести:Division result: [value] - В ветке
Err(error)вывести:Error: [error]
Ввод:
- Первая строка: Число, представляющее делимое (например,
20.0) - Вторая строка: Число, представляющее делитель (например,
4.0)
Вывод:
- Если деление успешно:
Division result: [result] - Если деление на ноль:
Error: Cannot divide by zero
Попробуйте сами
use std::io;
// TODO: Создайте здесь функцию safe_divide
// fn safe_divide(dividend: f64, divisor: f64) -> Result<f64, &'static str> {
// Ваш код здесь
// }
fn main() {
// Чтение первого ввода (делимое)
let mut dividend_input = String::new();
io::stdin().read_line(&mut dividend_input).expect("Failed to read line");
let dividend: f64 = dividend_input.trim().parse().expect("Invalid number");
// Чтение второго ввода (делитель)
let mut divisor_input = String::new();
io::stdin().read_line(&mut divisor_input).expect("Failed to read line");
let divisor: f64 = divisor_input.trim().parse().expect("Invalid number");
// TODO: Вызовите safe_divide и используйте match для обработки Result
// Выведите соответствующий результат в зависимости от полученного значения
}Все уроки раздела 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Итоги: поиск элемента