Menu
Coddy logo textTech

is_ok() e is_err()

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

A volte devi verificare rapidamente se un Result rappresenta un successo o un errore senza estrarre i valori effettivi. Rust offre due metodi pratici per farlo: .is_ok() e .is_err().

Entrambi i metodi restituiscono un valore booleano, rendendoli perfetti per semplici controlli condizionali. Il metodo .is_ok() restituisce true se il Result è Ok e false se è Err. Il metodo .is_err() funziona al contrario:

let success: Result = Ok(42);
let failure: Result = Err("Something went wrong");

if success.is_ok() {
    println!("Operation succeeded!");
}

if failure.is_err() {
    println!("Operation failed!");
}

Questi metodi sono particolarmente utili quando devi conoscere solo lo stato dell’esito, senza interessarti ai valori specifici contenuti al suo interno. A differenza di match, non consumano il Result, quindi puoi ancora usarlo in seguito.

challenge icon

Sfida

Facile

Riceverai due input. Il primo input è un numero (come stringa) e il secondo input è un indicatore di stato (success o failure). Crea un Result<i32, &'static str> in base allo stato. Se lo stato è success, crea un Ok contenente il numero analizzato. Se lo stato è failure, crea un Err con il messaggio "Operation failed". Usa .is_ok() e .is_err() per controllare lo stato del risultato e stampare il messaggio appropriato.

Requisiti:

  • Leggi il primo input (numero) e rimuovi gli spazi bianchi
  • Analizza il primo input come i32
  • Leggi il secondo input (stato) e rimuovi gli spazi bianchi
  • Crea una variabile Result<i32, &'static str>:
    • Se lo stato è success, assegna Ok(parsed_number)
    • Se lo stato è failure, assegna Err("Operation failed")
  • Usa .is_ok() per verificare se il risultato è positivo:
    • Se è vero, stampa: Success detected
  • Usa .is_err() per verificare se il risultato è un errore:
    • Se è vero, stampa: Error detected

Input:

  • Prima riga: un numero (ad es. 42)
  • Seconda riga: success oppure failure

Output:

  • Se lo stato è success: Success detected
  • Se lo stato è failure: Error detected

Provalo tu

use std::io;

fn main() {
    // Leggi il primo input (numero)
    let mut number_input = String::new();
    io::stdin().read_line(&mut number_input).expect("Failed to read line");
    let number_input = number_input.trim();
    
    // Converti il numero in i32
    let parsed_number: i32 = number_input.parse().expect("Failed to parse number");
    
    // Leggi il secondo input (status)
    let mut status = String::new();
    io::stdin().read_line(&mut status).expect("Failed to read line");
    let status = status.trim();
    
    // TODO: Crea un Result<i32, &'static str> in base a status
    // Se status è "success", crea Ok(parsed_number)
    // Se status è "failure", crea Err("Operation failed")
    
    // TODO: Usa .is_ok() e .is_err() per controllare il risultato e stampare il messaggio appropriato
}
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