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

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