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.
Desafío
FácilEscribe 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í
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Logic & Flow
1Flujo de control avanzado
La expresión 'match'Coincidencia de múltiples valoresCoincidencia de rangosLa expresión 'if let'Bucles como expresionesResumen - Analizador de comandos simple4Agrupando datos con Structs
¿Qué es un Struct?Visión general de los StructsAcceso a los campos de un StructStructs mutablesStructs como parámetros de funcionesStructs de tuplaResumen - Crear un Struct de Libro7Manejo de errores con 'Result'
¿Qué es un 'Result'?Uso de 'match' con 'Result'is_ok() e is_err()Atajos: unwrap y expectEl operador de signo de interrogación '?'Parsing de Strings a númerosResumen - Función de división segura10Closures y funciones anónimas
¿Qué es un Closure?Definir un Closure simpleClosures con parámetrosCapturar el entornoResumen - Closure sumador simple2Introducción a los vectores
¿Qué es un vector?Crear un vectorAñadir elementos con pushAcceder a los elementos de un vectorIterar sobre un vectorIteración mutableEliminar elementosResumen: Rastreador de puntuación básico5Pares clave-valor con Hash Maps
¿Qué es un Hash Map?Crear un Hash MapInsertar pares clave-valorAcceder a los valoresIterar sobre un Hash MapActualizar un valorEliminar un parRepaso: Contador de palabras8Proyecto: Inventario simple de artículos
Configuración del proyectoAgregar un artículoVerificar el stockVender un artículoUniendo todo3Lista de tareas en la línea de comandos
Configuración del proyectoAñadir una tareaVer todas las tareasEliminar una tareaCódigo final