Menu
Coddy logo textTech

Парсинг строк в числа

Часть раздела 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(), если вы уверены в успехе, или оператор ? для проброса ошибок.

challenge icon

Задание

Легко

Напишите функцию 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 {
    // Напишите код здесь
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Logic & Flow