Menu
CoddyTech

Il metodo expect

Fa parte della sezione Logica e flusso del percorso Rust di Coddy. Lezione 39 di 66.

Anche se .unwrap() fa il suo dovere, ha un grosso svantaggio: quando va in panico su un None, il messaggio di errore è generico e poco utile. È qui che .expect() viene in soccorso.

Il metodo .expect() funziona esattamente come .unwrap(): estrae il valore da un Some e genera un panic su un None. La differenza principale è che .expect() ti permette di fornire un messaggio personalizzato per il panic:

let maybe_score = Some(95);
let score = maybe_score.expect("Score should always be present");
println!("Your score is: {}", score);

Se Option contiene un Some, .expect() restituisce il valore interno proprio come .unwrap(). Ma se contiene un None, invece di un messaggio di panico generico, vedrai il tuo messaggio personalizzato, rendendo molto più facile capire cosa è andato storto e dove.

challenge icon

Sfida

Facile

Riceverai due input. Il primo input è un nome di prodotto e il secondo indica se il prodotto è disponibile (yes) o esaurito (no). Crea un Option<String> che contenga Some(product_name) se il prodotto è disponibile oppure None se è esaurito. Usa .expect() con un messaggio descrittivo per estrarre il nome del prodotto e stamparlo.

Requisiti:

  • Leggi il primo input (nome del prodotto) e rimuovi gli spazi bianchi
  • Leggi il secondo input (stato delle scorte) e rimuovi gli spazi bianchi
  • Crea una variabile Option<String>:
    • Se lo stato delle scorte è yes, assegna Some(product_name.to_string())
    • Se lo stato delle scorte è no, assegna None
  • Usa .expect() con il messaggio "Product should be in stock" per estrarre il nome del prodotto
  • Stampa il nome del prodotto estratto nel formato: Product available: [product_name]

Input:

  • Prima riga: un nome di prodotto (ad esempio, Laptop)
  • Seconda riga: yes oppure no

Output:

  • Se lo stato delle scorte è yes: Product available: [product_name]
  • Se lo stato delle scorte è no: il programma andrà in panic con il messaggio personalizzato "Product should be in stock" (è il comportamento previsto per questa sfida)

Nota: Quando lo stato delle scorte è no, chiamare .expect() su None causerà un panic con il tuo messaggio personalizzato. Questo dimostra che .expect() fornisce informazioni sugli errori più utili rispetto a .unwrap().

Provalo tu

use std::io;

fn main() {
    // Leggi il nome del prodotto
    let mut product_name = String::new();
    io::stdin().read_line(&mut product_name).expect("Failed to read line");
    let product_name = product_name.trim();
    
    // Leggi lo stato delle scorte
    let mut stock_status = String::new();
    io::stdin().read_line(&mut stock_status).expect("Failed to read line");
    let stock_status = stock_status.trim();
    
    // TODO: Scrivi il tuo codice qui sotto
    // Crea un Option<String> in base a stock_status
    // Usa .expect() per estrarre il nome del prodotto
    // Stampa il risultato nel formato: Product available: [product_name]
    
}
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