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 obbliga a 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 braccio 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 wrapper.
Il braccio None gestisce il caso in cui non c'è alcun valore, consentendoti di fornire un comportamento alternativo, come mostrare un messaggio predefinito o intraprendere un'azione del tutto diversa.
Sfida
FacileRiceverai in input il nome di uno studente. Il nome potrebbe essere presente nel sistema oppure 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 eventuali spazi bianchi dall'input usando
.trim() - Crea una variabile
Option<String>:- Se il nome ripulito non è vuoto, assegna
Some(name.to_string()) - Se il nome ripulito è vuoto, assegna
None
- Se il nome ripulito non è vuoto, assegna
- Usa un'espressione
matchper gestire entrambe le varianti diOption - Nel braccio
Some(name), stampa:Welcome, [name]! - Nel braccio
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 il nome sia vuoto o meno
// TODO: Usa un'espressione match per gestire i casi Some e None e stampare il messaggio appropriato
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Flusso di controllo avanzato
L’espressione 'match'Corrispondenza di più valoriCorrispondenza di intervalliL’espressione 'if let'I cicli come espressioniRiepilogo - Parser di comandi semplice4Raggruppare i dati con le struct
Che cos'è una struct?Panoramica sulle structAccedere ai campi di una structStruct mutabiliLe struct come parametri di funzioneStruct tuplaRiepilogo - Crea una struct Book2Introduzione ai vettori
Che cos'è un vettore?Creare un vettoreAggiungere elementi con pushAccedere agli elementi di un vettoreScorrere un vettoreIterazione mutabileRimuovere elementiRiepilogo - Tracker di punteggi di base5Coppie chiave-valore con le mappe hash
Che cos'è una mappa hash?Creare una mappa hashInserire coppie chiave-valoreAccedere ai valoriIterare su una mappa hashAggiornare un valoreRimuovere una coppiaRiepilogo - Contatore di parole8Progetto: semplice inventario di articoli
Impostazione del progettoAggiungere un articoloControllare le scorteVendere un articoloMettere insieme il tutto3Lista di cose da fare da riga di comando
Impostazione del progettoAggiungere un'attivitàVisualizzare tutte le attivitàRimuovere un'attivitàCodice finale6Gestire l’assenza con 'Option'
Che cos’è un 'Option'?Usare 'match' con 'Option'is_some() e is_none()Estrarre il valore da un 'Option'Il metodo expectFornire un valore predefinito: unwrap_orRiepilogo - Trovare un elementoEsercitati da solo: Compilatore Rust online