Fornire un valore predefinito: unwrap_or
Fa parte della sezione Logica e flusso del percorso Rust di Coddy. Lezione 40 di 66.
Sebbene .unwrap() e .expect() possano estrarre valori da un Option, entrambi hanno un grave difetto: generano un panic quando incontrano un None. Per scrivere codice più sicuro, Rust fornisce .unwrap_or(), un metodo che non genera mai panic.
Il metodo .unwrap_or() accetta un valore predefinito come argomento. Se Option contiene un Some, restituisce il valore interno. Se è un None, restituisce il valore predefinito che hai fornito:
let maybe_score = Some(85);
let score = maybe_score.unwrap_or(0);
println!("Score: {}", score); // Stampa: Score: 85
let no_score: Option = None;
let default_score = no_score.unwrap_or(0);
println!("Score: {}", default_score); // Stampa: Score: 0Questo approccio è molto più sicuro di .unwrap() perché il tuo programma non andrà mai in crash: otterrai sempre un valore utilizzabile.
Sfida
FacileRiceverai due input. Il primo input è un punteggio (come numero) e il secondo indica se il punteggio è disponibile (yes) o mancante (no). Crea un Option<i32> in base allo stato di disponibilità. Usa .unwrap_or() per estrarre in sicurezza il punteggio con un valore predefinito di 50, quindi stampa il punteggio finale.
Requisiti:
- Leggi il primo input (punteggio) e rimuovi gli spazi bianchi
- Analizza il primo input come
i32 - Leggi il secondo input (stato di disponibilità) e rimuovi gli spazi bianchi
- Crea una variabile
Option<i32>:- Se lo stato di disponibilità è
yes, assegnaSome(score) - Se lo stato di disponibilità è
no, assegnaNone
- Se lo stato di disponibilità è
- Usa
.unwrap_or(50)per estrarre il punteggio con un valore predefinito di50 - Stampa il punteggio finale nel formato:
Final score: [score]
Input:
- Prima riga: un numero che rappresenta il punteggio (ad es.,
85) - Seconda riga:
yesoppureno
Output:
- Se lo stato di disponibilità è
yes:Final score: [score](il punteggio effettivo) - Se lo stato di disponibilità è
no:Final score: 50(il valore predefinito)
Provalo tu
use std::io;
fn main() {
// Leggi il punteggio
let mut score_input = String::new();
io::stdin().read_line(&mut score_input).expect("Failed to read line");
let score: i32 = score_input.trim().parse().expect("Invalid number");
// Leggi lo stato di disponibilità
let mut availability = String::new();
io::stdin().read_line(&mut availability).expect("Failed to read line");
let availability = availability.trim();
// TODO: Scrivi il tuo codice qui sotto
// Crea un Option<i32> in base allo stato di disponibilità
// Usa .unwrap_or(50) per ottenere il punteggio finale
// Stampa il risultato
println!("Final score: {}", final_score);
}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