Парсинг строк в числа
Часть раздела Logic & Flow путешествия по 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)
Шпаргалка
Метод .parse() преобразует строку в число и возвращает тип Result, так как парсинг может завершиться ошибкой:
let valid_number = "42";
let invalid_number = "hello";
let result1: Result<i32, _> = valid_number.parse();
let result2: Result<i32, _> = invalid_number.parse();Когда парсинг проходит успешно, .parse() возвращает Ok(number). Когда он завершается ошибкой, он возвращает Err(error).
Вы можете обрабатывать результаты парсинга с помощью match, unwrap(), оператора ? или unwrap_or(), чтобы предоставить значение по умолчанию в случае ошибки.
Попробуйте сами
fn parse_to_integer(input: String) -> i32 {
// Напишите код здесь
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела 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Итоги: поиск элемента