Menu
CoddyTech

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.

challenge icon

Sfida

Facile

Riceverai 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 f64 e restituisca Result<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)
  • Chiama la funzione con i due numeri analizzati
  • Usa un'espressione match per gestire il Result
  • 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
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Rust online