Uso de 'match' con 'Option'
Parte de la sección Logic & Flow del Journey de Rust de Coddy — lección 36 de 66.
Ahora que entiendes qué es Option, aprendamos la forma más común y explícita de manejarlo: usando una expresión match. Este enfoque te obliga a considerar ambos casos posibles: cuando hay un valor y cuando no lo hay.
La expresión match funciona perfectamente con Option porque puedes crear brazos para ambas variantes:
let maybe_name = Some("Alice".to_string());
match maybe_name {
Some(name) => println!("Hello, {}!", name),
None => println!("Hello, stranger!"),
}Observa cómo el brazo Some(name) extrae el valor de dentro de la variante Some. La variable name ahora contiene el String real, no el Option. Esto se llama desestructuración: estás extrayendo el valor interno del envoltorio.
El brazo None maneja el caso en el que no hay ningún valor, permitiéndote proporcionar un comportamiento alternativo como mostrar un mensaje predeterminado o realizar una acción completamente diferente.
Desafío
FácilRecibirás el nombre de un estudiante como entrada. El nombre puede estar presente en el sistema o puede faltar. Crea un Option<String> que contenga Some(name) si el nombre no está vacío, o None si el nombre está vacío. Usa una expresión match para manejar ambos casos e imprimir el mensaje apropiado.
Requisitos:
- Lee la entrada como una cadena (nombre del estudiante)
- Elimina cualquier espacio en blanco de la entrada usando
.trim() - Crea una variable
Option<String>:- Si el nombre recortado no está vacío, asigna
Some(name.to_string()) - Si el nombre recortado está vacío, asigna
None
- Si el nombre recortado no está vacío, asigna
- Usa una expresión
matchpara manejar ambas variantes delOption - En el brazo
Some(name), imprime:Welcome, [name]! - En el brazo
None, imprime:No name provided
Entrada:
- Una sola línea que contiene el nombre de un estudiante o una línea vacía
Salida:
- Si se proporciona un nombre:
Welcome, [name]! - Si no se proporciona ningún nombre (entrada vacía):
No name provided
Hoja de referencia
Usa una expresión match para manejar valores Option creando brazos para ambas variantes:
let maybe_name = Some("Alice".to_string());
match maybe_name {
Some(name) => println!("Hello, {}!", name),
None => println!("Hello, stranger!"),
}El brazo Some(name) usa desestructuración para extraer el valor interno de la variante Some. La variable name contiene el valor real, no el envoltorio Option.
El brazo None maneja el caso en el que no hay valor, permitiéndote proporcionar un comportamiento alternativo.
Pruébalo tú mismo
use std::io;
fn main() {
// Leer la entrada
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let name = input.trim();
// TODO: Crear un Option<String> basado en si el nombre está vacío o no
// TODO: Usar una expresión match para manejar los casos Some y None 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 final6Manejo de ausencia con 'Option'
¿Qué es un 'Option'?Uso de 'match' con 'Option'is_some() e is_none()Desempaquetar un 'Option'El método expectProporcionar un valor por defecto: unwrap_orResumen - Encontrar un elemento