Usare «match» con «Result»
Fa parte della sezione Logica e flusso del percorso Rust di Coddy. Lezione 43 di 66.
Ora che hai capito cos'è un Result, impariamo il modo più esplicito e potente per gestire sia i casi di successo che quelli di errore: usando un'espressione match.
Proprio come con Option, match ti obbliga a gestire entrambe le varianti di un Result. Crei un ramo per Ok per gestire il successo e un altro ramo per Err per gestire l'errore:
let result = divide(10, 2);
match result {
Ok(value) => println!("Division successful: {}", value),
Err(error) => println!("Division failed: {}", error),
}Quando il Result è Ok, il match estrae il valore riuscito ed esegue il primo ramo. Quando è Err, estrae le informazioni sull’errore ed esegue il secondo ramo. Questo schema garantisce che tu non ignori mai accidentalmente un possibile errore.
Sfida
FacileRiceverai due input. Il primo input è un numero (sotto forma di stringa) e il secondo input è un altro numero (sotto forma di stringa). Crea una funzione che tenti di dividere il primo numero per il secondo e restituisca un Result<f64, &'static str>. Se il secondo numero è zero, restituisci un Err con il messaggio "Division by zero". Altrimenti, restituisci Ok con il risultato della divisione. Usa un'espressione match per gestire i casi Ok ed Err e stampare il messaggio appropriato.
Requisiti:
- Leggi il primo input (dividendo) ed elimina gli spazi bianchi
- Converti il primo input in
f64 - Leggi il secondo input (divisore) ed elimina gli spazi bianchi
- Converti il secondo input in
f64 - Crea una funzione che accetti due parametri
f64e restituiscaResult<f64, &'static str> - All'interno della funzione, verifica se il divisore è
0.0:- Se sì, restituisci
Err("Division by zero") - Se no, restituisci
Ok(dividend / divisor)
- Se sì, restituisci
- Chiama la funzione con i due numeri convertiti
- Usa un'espressione
matchper gestire ilResult - Nel ramo
Ok(value), stampa:Result: [value] - Nel ramo
Err(error), stampa:Error: [error]
Input:
- Prima riga: un numero che rappresenta il dividendo (ad es.,
10.0) - Seconda riga: un numero che rappresenta il divisore (ad es.,
2.0)
Output:
- Se la divisione riesce:
Result: [result] - Se la divisione è per zero:
Error: Division by zero
Provalo tu
use std::io;
// TODO: Crea qui la funzione divide che restituisce Result<f64, &'static str>
fn main() {
// Leggi il primo input (dividendo)
let mut dividend_input = String::new();
io::stdin().read_line(&mut dividend_input).expect("Failed to read line");
let dividend: f64 = dividend_input.trim().parse().expect("Invalid number");
// Leggi il secondo input (divisore)
let mut divisor_input = String::new();
io::stdin().read_line(&mut divisor_input).expect("Failed to read line");
let divisor: f64 = divisor_input.trim().parse().expect("Invalid number");
// TODO: Chiama la funzione divide e usa match per gestire il Result
// Stampa "Result: [value]" nel caso Ok
// Stampa "Error: [error]" nel caso Err
}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 Book7Gestire gli errori con «Result»
Che cos’è «Result»?Usare «match» con «Result»is_ok() e is_err()Scorciatoie: unwrap ed expectL’operatore punto interrogativo «?»Convertire stringhe in numeriRiepilogo: funzione di divisione sicura2Introduzione 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 finaleEsercitati da solo: Compilatore Rust online