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.
Sfida
FacileRiceverai 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
- Se il nome dopo la rimozione degli spazi vuoti non è vuoto, assegna
- Usa un'espressione
matchper gestire entrambe le varianti diOption - 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
}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'Cicli come espressioniRipasso - Parser di comandi semplice4Raggruppare i dati con le struct
Che cos'è una struct?Panoramica sulle structAccedere ai campi delle structStruct mutabiliStruct come parametri di funzioneStruct tuplaRiepilogo - Creare una struct Book2Introduzione ai vettori
Che cos'è un vettore?Creare un vettoreAggiungere elementi con pushAccedere agli elementi di un vettoreIterare su un vettoreIterazione mutabileRimuovere elementiRiepilogo - Tracker dei punteggi di base5Coppie chiave-valore con mappe hash
Che cos'è una mappa hash?Creare una mappa hashInserire coppie chiave-valoreAccedere ai valoriScorrere una mappa hashAggiornare un valoreRimuovere una coppiaRiepilogo - Contatore di parole8Progetto: inventario semplice degli articoli
Configurazione del progettoAggiungere un articoloControllare le scorteVendere un articoloMettere tutto insieme3Lista di attività da riga di comando
Configurazione 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