is_ok() e is_err()
Parte de la sección Logic & Flow del Journey de Rust de Coddy — lección 44 de 66.
A veces necesitas comprobar rápidamente si un Result representa éxito o fallo sin extraer los valores reales. Rust proporciona dos métodos convenientes para esto: .is_ok() y .is_err().
Ambos métodos devuelven un valor booleano, lo que los hace perfectos para comprobaciones condicionales simples. El método .is_ok() devuelve true si el Result es Ok, y false si es Err. El método .is_err() funciona a la inversa:
let success: Result = Ok(42);
let failure: Result = Err("Something went wrong");
if success.is_ok() {
println!("Operation succeeded!");
}
if failure.is_err() {
println!("Operation failed!");
}Estos métodos son particularmente útiles cuando solo necesitas conocer el estado del resultado sin preocuparte por los valores específicos en su interior. A diferencia de match, no consumen el Result, por lo que aún puedes usarlo después.
Desafío
FácilRecibirás dos entradas. La primera entrada es un número (como una cadena), y la segunda entrada es un indicador de estado (success o failure). Crea un Result<i32, &'static str> basado en el estado. Si el estado es success, crea un Ok que contenga el número analizado. Si el estado es failure, crea un Err con el mensaje "Operation failed". Usa .is_ok() y .is_err() para verificar el estado del resultado e imprimir el mensaje apropiado.
Requerimientos:
- Lee la primera entrada (número) y elimina los espacios en blanco
- Analiza la primera entrada a
i32 - Lee la segunda entrada (estado) y elimina los espacios en blanco
- Crea una variable
Result<i32, &'static str>:- Si el estado es
success, asignaOk(parsed_number) - Si el estado es
failure, asignaErr("Operation failed")
- Si el estado es
- Usa
.is_ok()para verificar si el resultado es exitoso:- Si es verdadero, imprime:
Success detected
- Si es verdadero, imprime:
- Usa
.is_err()para verificar si el resultado es un error:- Si es verdadero, imprime:
Error detected
- Si es verdadero, imprime:
Entrada:
- Primera línea: Un número (por ejemplo,
42) - Segunda línea: Ya sea
successofailure
Salida:
- Si el estado es
success:Success detected - Si el estado es
failure:Error detected
Hoja de referencia
Rust proporciona dos métodos para comprobar el estado de un Result sin extraer sus valores:
.is_ok()- devuelvetruesi elResultesOk,falseen caso contrario.is_err()- devuelvetruesi elResultesErr,falseen caso contrario
let success: Result<i32, &str> = Ok(42);
let failure: Result<i32, &str> = Err("Something went wrong");
if success.is_ok() {
println!("Operation succeeded!");
}
if failure.is_err() {
println!("Operation failed!");
}Estos métodos son útiles para comprobaciones condicionales simples cuando solo necesitas conocer el estado del resultado. A diferencia de match, no consumen el Result, lo que permite usarlo después.
Pruébalo tú mismo
use std::io;
fn main() {
// Leer la primera entrada (número)
let mut number_input = String::new();
io::stdin().read_line(&mut number_input).expect("Failed to read line");
let number_input = number_input.trim();
// Convertir el número a i32
let parsed_number: i32 = number_input.parse().expect("Failed to parse number");
// Leer la segunda entrada (estado)
let mut status = String::new();
io::stdin().read_line(&mut status).expect("Failed to read line");
let status = status.trim();
// TODO: Crear un Result<i32, &'static str> basado en el estado
// Si el estado es "success", crear Ok(parsed_number)
// Si el estado es "failure", crear Err("Operation failed")
// TODO: Usar .is_ok() y .is_err() para verificar el resultado e imprimir el mensaje apropiado
}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