Menu
Coddy logo textTech

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.

challenge icon

Sfida

Facile

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