Parsing de Strings a números
Parte de la sección Lógica y Flujo del Journey de Rust de Coddy. Lección 47 de 66.
Una de las aplicaciones más comunes de Result en el mundo real es convertir cadenas en 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" se puede analizar y convertir en el número 42, pero "hello" no se puede convertir 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 se realiza correctamente, .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 gestionar explícitamente ambas posibilidades, lo que evita que tu programa se bloquee con una entrada no válida.
Puedes manejar el resultado del análisis sintáctico usando cualquiera de las técnicas de Result que has aprendido: match para un manejo explícito, unwrap() si tienes la certeza de que tendrá éxito, o el operador ? para propagar errores.
Desafío
FácilEscribe una función parse_to_integer que tome una cadena input y devuelva el valor entero analizado. Si la cadena no se puede analizar como un entero válido, devuelve 0 como valor predeterminado.
Usa el método .parse() para convertir la cadena a un i32 y gestiona Result adecuadamente para proporcionar un valor de retorno seguro.
Parámetros:
input(String): La cadena que se va a analizar como un entero
Devuelve: El entero analizado si la operación tiene éxito, o 0 si el análisis falla (i32)
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 Lógica y Flujo
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 finalPractica por tu cuenta: Compilador de Rust online