Che cos’è un 'Option'?
Fa parte della sezione Logica e flusso del percorso Rust di Coddy. Lezione 35 di 66.
Nella programmazione, capita spesso di incontrare situazioni in cui un valore potrebbe essere presente oppure no. Per esempio, cercando un elemento in un elenco, potresti trovarlo oppure potrebbe non esistere affatto. I linguaggi di programmazione tradizionali usano spesso valori speciali come null o -1 per rappresentare il «nulla», ma questo approccio può causare bug e arresti anomali.
Rust adotta un approccio diverso con l'enum Option<T>. È un tipo integrato che rappresenta esplicitamente la possibilità che un valore sia assente. Invece di indovinare se un valore esiste, Rust ti obbliga a gestire entrambi i casi fin dall'inizio.
L'enumerazione Option ha esattamente due varianti:
Some(value) // Contiene un valore
None // Non contiene alcun valoreQuando una funzione potrebbe non restituire un valore, restituisce un Option. Se c'è un valore da restituire, lo racchiude in Some. Se non c'è alcun valore, restituisce None.
Questo rende esplicita nel sistema dei tipi la possibile assenza, impedendoti di usare accidentalmente un valore che non esiste.
Hai già visto Option in azione con il metodo .get() di una mappa hash: restituisce Some(&value) quando una chiave esiste, oppure None quando non esiste. Questo schema ricorre in tutto Rust e rende il tuo codice più sicuro e prevedibile.
Provalo tu
Questa lezione non include una sfida di codice.
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