Menu
Coddy logo textTech

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 genera un panic 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 va in panico su un None. La differenza fondamentale è che .expect() ti permette di fornire un messaggio di panico personalizzato:

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 è 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 es. 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 genererà un panic con il messaggio personalizzato "Product should be in stock" (questo è 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 come .expect() fornisca 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