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 sia quelli di errore: usando un'espressione match.
Proprio come con Option, match ti obbliga a gestire entrambe le varianti di un Result. Crei un braccio per Ok per gestire il successo e un altro braccio per Err per gestire il fallimento:
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 ottenuto e esegue il primo braccio. Quando è Err, estrae le informazioni sull’errore e esegue il secondo braccio. Questo schema garantisce che tu non ignori mai accidentalmente un possibile errore.
Sfida
FacileRiceverai due input. Il primo input è un numero (come stringa) e il secondo input è un altro numero (come stringa). Crea una funzione che provi a 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) e rimuovi gli spazi bianchi
- Analizza il primo input come
f64 - Leggi il secondo input (divisore) e rimuovi gli spazi bianchi
- Analizza il secondo input come
f64 - Crea una funzione che accetti due parametri
f64e restituiscaResult<f64, &'static str> - All'interno della funzione, controlla 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 analizzati
- Usa un'espressione
matchper gestire ilResult - Nel braccio
Ok(value), stampa:Result: [value] - Nel braccio
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 ha esito positivo:
Result: [result] - Se la divisione per zero:
Error: Division by zero
Provalo tu
use std::io;
// TODO: Crea qui la tua 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 tua 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'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 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 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 finaleEsercitati da solo: Compilatore Rust online