Menu
Coddy logo textTech

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.

challenge icon

Desafío

Fácil

Recibirá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
  • Usa una expresión match para manejar ambas variantes del Option
  • 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
}
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