Menu
Coddy logo textTech

Usare 'match' con 'Option'

Fa parte della sezione Logica e flusso del percorso Rust di Coddy. Lezione 36 di 66.

Ora che hai capito cos'è Option, impariamo il modo più comune ed esplicito per gestirlo: usando un'espressione match. Questo approccio ti impone di considerare entrambi i casi possibili: quando c'è un valore e quando non c'è.

L'espressione match funziona perfettamente con Option perché puoi creare bracci per entrambe le varianti:

let maybe_name = Some("Alice".to_string());

match maybe_name {
    Some(name) => println!("Hello, {}!", name),
    None => println!("Hello, stranger!"),
}

Nota come il ramo Some(name) estrae il valore contenuto nella variante Some. La variabile name ora contiene la String effettiva, non l'Option. Questa operazione si chiama destrutturazione: stai estraendo il valore interno dal contenitore.

Il ramo None gestisce il caso in cui non c'è alcun valore, consentendoti di specificare un comportamento alternativo, come mostrare un messaggio predefinito o intraprendere un'azione del tutto diversa.

challenge icon

Sfida

Facile

Riceverai in input il nome di uno studente. Il nome potrebbe essere presente nel sistema oppure potrebbe mancare. Crea un Option<String> che contenga Some(name) se il nome non è vuoto, oppure None se il nome è vuoto. Usa un'espressione match per gestire entrambi i casi e stampare il messaggio appropriato.

Requisiti:

  • Leggi l'input come stringa (nome dello studente)
  • Rimuovi gli spazi vuoti dall'input usando .trim()
  • Crea una variabile Option<String>:
    • Se il nome dopo la rimozione degli spazi vuoti non è vuoto, assegna Some(name.to_string())
    • Se il nome dopo la rimozione degli spazi vuoti è vuoto, assegna None
  • Usa un'espressione match per gestire entrambe le varianti di Option
  • Nel ramo Some(name), stampa: Welcome, [name]!
  • Nel ramo None, stampa: No name provided

Input:

  • Una singola riga contenente il nome di uno studente oppure una riga vuota

Output:

  • Se viene fornito un nome: Welcome, [name]!
  • Se non viene fornito alcun nome (input vuoto): No name provided

Provalo tu

use std::io;

fn main() {
    // Leggi l'input
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let name = input.trim();
    
    // TODO: Crea un Option<String> in base al fatto che name sia vuoto o meno
    
    // TODO: Usa un'espressione match per gestire i casi Some e None e stampare il messaggio appropriato
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Rust online