Парсинг строк в числа
Часть раздела Логика и управление потоком путешествия по Rust на Coddy. Урок 47 из 66.
Один из наиболее распространённых примеров применения Result в реальных задачах — преобразование строк в числа. В Rust это делается с помощью метода .parse(), который отлично показывает, зачем нужен Result: преобразование может завершиться неудачей.
Метод .parse() пытается преобразовать строку в число, но не каждая строка представляет собой допустимое число. Например, «42» можно преобразовать в число 42, а «hello» нельзя преобразовать ни в какое число:
let valid_number = "42";
let invalid_number = "hello";
let result1: Result = valid_number.parse();
let result2: Result = invalid_number.parse();Если разбор проходит успешно, .parse() возвращает Ok(number), содержащий преобразованное значение. Если разбор завершается неудачей, он возвращает Err(error) с информацией о том, почему разбор не удался. Это заставляет тебя явно обрабатывать оба возможных результата, не позволяя программе аварийно завершиться при недопустимом вводе.
Вы можете обработать результат разбора любым из изученных вами способов работы с Result: использовать match для явной обработки, unwrap(), если вы уверены, что операция завершится успешно, или оператор ?, чтобы передать ошибки дальше.
Задание
ЛегкоНапиши функцию parse_to_integer, которая принимает строку input и возвращает разобранное целочисленное значение. Если строку нельзя разобрать как допустимое целое число, верни 0 в качестве значения по умолчанию.
Используй метод .parse(), чтобы преобразовать строку в i32, и корректно обработай Result, чтобы вернуть безопасное значение.
Параметры:
input(String): Строка, которую нужно разобрать как целое число
Возвращает: Разобранное целое число в случае успеха или 0, если разбор не удался (i32)
Попробуйте сами
fn parse_to_integer(input: String) -> i32 {
// Напишите код здесь
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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