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.
Wyzwanie
ŁatwyOtrzymasz 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, przypiszOk(parsed_number) - Jeśli status to
failure, przypiszErr("Operation failed")
- Jeśli status to
- Użyj
.is_ok(), aby sprawdzić, czy wynik jest pomyślny:- Jeśli tak, wypisz:
Success detected
- Jeśli tak, wypisz:
- Użyj
.is_err(), aby sprawdzić, czy wynik jest błędem:- Jeśli tak, wypisz:
Error detected
- Jeśli tak, wypisz:
Wejście:
- Pierwszy wiersz: liczba (np.
42) - Drugi wiersz:
successlubfailure
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
}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
1Zaawansowane sterowanie przepływem
Wyrażenie „match”Dopasowywanie wielu wartościDopasowywanie zakresówWyrażenie „if let”Pętle jako wyrażeniaPodsumowanie — prosty parser poleceń4Grupowanie danych za pomocą struktur
Czym jest struktura?Przegląd strukturDostęp do pól strukturyModyfikowalne strukturyStruktury jako parametry funkcjiStruktury krotkowePodsumowanie — utwórz strukturę Book7Obsługa błędów za pomocą „Result”
Czym jest „Result”?Używanie „match” z „Result”is_ok() i is_err()Skróty: unwrap i expectOperator znaku zapytania „?”Konwertowanie ciągów znaków na liczbyPodsumowanie — bezpieczna funkcja dzielenia2Wprowadzenie do wektorów
Czym jest wektor?Tworzenie wektoraDodawanie elementów za pomocą pushDostęp do elementów wektoraIterowanie po wektorzeIterowanie z możliwością modyfikacjiUsuwanie elementówPodsumowanie — prosty licznik punktów5Pary klucz–wartość z mapami hashującymi
Czym jest mapa haszująca?Tworzenie mapy haszującejWstawianie par klucz–wartośćDostęp do wartościIterowanie po mapie haszującejAktualizowanie wartościUsuwanie paryPodsumowanie – licznik słów8Projekt: Prosty system inwentaryzacji
Konfiguracja projektuDodawanie produktuSprawdzanie stanu magazynowegoSprzedaż produktuŁączenie wszystkiego w całość3Lista zadań w wierszu poleceń
Konfiguracja projektuDodawanie zadaniaWyświetlanie wszystkich zadańUsuwanie zadaniaKońcowy kodPoćwicz samodzielnie: Kompilator Rust online