Menu
Coddy logo textTech

Parsing de Strings a números

Parte de la sección Logic & Flow del Journey de Rust de Coddy — lección 47 de 66.

Una de las aplicaciones más comunes en el mundo real de Result es convertir cadenas a números. En Rust, esto se hace usando el método .parse(), que demuestra perfectamente por qué existe Result, porque el análisis puede fallar.

El método .parse() intenta convertir una cadena en un número, pero no todas las cadenas representan un número válido. Por ejemplo, "42" puede ser convertido en el número 42, pero "hello" no puede ser convertido en ningún número:

let valid_number = "42";
let invalid_number = "hello";

let result1: Result = valid_number.parse();
let result2: Result = invalid_number.parse();

Cuando el análisis tiene éxito, .parse() devuelve Ok(number) que contiene el valor convertido. Cuando falla, devuelve Err(error) con información sobre por qué falló el análisis. Esto te obliga a manejar ambas posibilidades de forma explícita, evitando que tu programa se bloquee ante una entrada no válida.

Puedes manejar el resultado del análisis utilizando cualquiera de las técnicas de Result que has aprendido: match para un manejo explícito, unwrap() si estás seguro de que tendrá éxito, o el operador ? para propagar errores.

challenge icon

Desafío

Fácil

Escribe una función parse_to_integer que toma una cadena input y devuelve el valor entero analizado. Si la cadena no se puede analizar en un entero válido, devuelve 0 como valor predeterminado.

Usa el método .parse() para convertir la cadena a un i32, y maneja el Result adecuadamente para proporcionar un valor de retorno seguro.

Parámetros:

  • input (String): La cadena a analizar en un entero

Devuelve: El entero analizado si tiene éxito, o 0 si el análisis falla (i32)

Hoja de referencia

El método .parse() convierte una cadena en un número y devuelve un tipo Result porque el análisis puede fallar:

let valid_number = "42";
let invalid_number = "hello";

let result1: Result<i32, _> = valid_number.parse();
let result2: Result<i32, _> = invalid_number.parse();

Cuando el análisis tiene éxito, .parse() devuelve Ok(number). Cuando falla, devuelve Err(error).

Puedes manejar los resultados del análisis usando match, unwrap(), el operador ?, o unwrap_or() para proporcionar un valor por defecto en caso de fallo.

Pruébalo tú mismo

fn parse_to_integer(input: String) -> i32 {
    // Escribe el código aquí
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Logic & Flow