Menu
Coddy logo textTech

is_ok() i is_err()

Część sekcji Logika i przepływ programu ścieżki Rust w Coddy. Lekcja 44 z 66.

Czasami trzeba szybko sprawdzić, czy Result oznacza powodzenie czy niepowodzenie, bez pobierania właściwych wartości. Rust udostępnia do tego dwie wygodne metody: .is_ok() i .is_err().

Obie metody zwracają wartość logiczną, dzięki czemu idealnie nadają się do prostych sprawdzeń warunkowych. Metoda .is_ok() zwraca true, jeśli Result ma wartość Ok, a false, jeśli ma wartość Err. Metoda .is_err() działa odwrotnie:

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!");
}

Te metody są szczególnie przydatne, gdy chcesz znać tylko status wyniku i nie interesują Cię konkretne wartości w środku. W przeciwieństwie do match nie zużywają wartości Result, więc możesz nadal użyć jej później.

challenge icon

Wyzwanie

Łatwy

Otrzymasz dwa wejścia. Pierwsze wejście to liczba (jako ciąg znaków), a drugie to wskaźnik statusu (success lub failure). Utwórz wartość typu Result<i32, &'static str> na podstawie statusu. Jeśli status to success, utwórz Ok zawierające sparsowaną liczbę. Jeśli status to failure, utwórz Err z komunikatem "Operation failed". Użyj .is_ok() i .is_err(), aby sprawdzić status wyniku i wypisać odpowiedni komunikat.

Wymagania:

  • Odczytaj pierwsze wejście (liczbę) i usuń białe znaki
  • Sparsuj pierwsze wejście jako i32
  • Odczytaj drugie wejście (status) i usuń białe znaki
  • Utwórz zmienną typu Result<i32, &'static str>:
    • Jeśli status to success, przypisz Ok(parsed_number)
    • Jeśli status to failure, przypisz Err("Operation failed")
  • Użyj .is_ok(), aby sprawdzić, czy wynik jest pomyślny:
    • Jeśli tak, wypisz: Success detected
  • Użyj .is_err(), aby sprawdzić, czy wynik jest błędem:
    • Jeśli tak, wypisz: Error detected

Wejście:

  • Pierwszy wiersz: liczba (np. 42)
  • Drugi wiersz: success lub failure

Wyjście:

  • Jeśli status to success: Success detected
  • Jeśli status to failure: Error detected

Spróbuj swoich sił

use std::io;

fn main() {
    // Odczytaj pierwszą daną wejściową (liczbę)
    let mut number_input = String::new();
    io::stdin().read_line(&mut number_input).expect("Failed to read line");
    let number_input = number_input.trim();
    
    // Przekonwertuj liczbę na i32
    let parsed_number: i32 = number_input.parse().expect("Failed to parse number");
    
    // Odczytaj drugą daną wejściową (status)
    let mut status = String::new();
    io::stdin().read_line(&mut status).expect("Failed to read line");
    let status = status.trim();
    
    // TODO: Utwórz Result<i32, &'static str> na podstawie status
    // Jeśli status to "success", utwórz Ok(parsed_number)
    // Jeśli status to "failure", utwórz Err("Operation failed")
    
    // TODO: Użyj .is_ok() i .is_err(), aby sprawdzić wynik i wypisać odpowiedni komunikat
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator Rust online