Podawanie wartości domyślnej: unwrap_or
Część sekcji Logika i przepływ programu ścieżki Rust w Coddy. Lekcja 40 z 66.
Chociaż .unwrap() i .expect() mogą pobierać wartości z Option, obie metody mają poważną wadę: powodują panikę po napotkaniu wartości None. Aby pisać bezpieczniejszy kod, Rust udostępnia .unwrap_or() — metodę, która nigdy nie powoduje paniki.
Metoda .unwrap_or() przyjmuje wartość domyślną jako argument. Jeśli Option zawiera Some, zwraca wartość wewnętrzną. Jeśli zawiera None, zwraca podaną przez Ciebie wartość domyślną:
let maybe_score = Some(85);
let score = maybe_score.unwrap_or(0);
println!("Score: {}", score); // Wypisuje: Score: 85
let no_score: Option = None;
let default_score = no_score.unwrap_or(0);
println!("Score: {}", default_score); // Wypisuje: Score: 0To podejście jest znacznie bezpieczniejsze niż .unwrap(), ponieważ program nigdy się nie zawiesi — zawsze otrzymasz użyteczną wartość.
Wyzwanie
ŁatwyOtrzymasz dwa dane wejściowe. Pierwsze to wynik (jako liczba), a drugie wskazuje, czy wynik jest dostępny (yes), czy go brakuje (no). Utwórz Option<i32> na podstawie informacji o dostępności. Użyj .unwrap_or(), aby bezpiecznie pobrać wynik z domyślną wartością 50, a następnie wypisz końcowy wynik.
Wymagania:
- Odczytaj pierwsze dane wejściowe (wynik) i usuń białe znaki
- Przekonwertuj pierwsze dane wejściowe na
i32 - Odczytaj drugie dane wejściowe (informację o dostępności) i usuń białe znaki
- Utwórz zmienną typu
Option<i32>:- Jeśli wynik jest dostępny (
yes), przypiszSome(score) - Jeśli wynik nie jest dostępny (
no), przypiszNone
- Jeśli wynik jest dostępny (
- Użyj
.unwrap_or(50), aby pobrać wynik z domyślną wartością50 - Wypisz końcowy wynik w formacie:
Final score: [score]
Dane wejściowe:
- Pierwszy wiersz: Liczba oznaczająca wynik (np.
85) - Drugi wiersz:
yeslubno
Wynik:
- Jeśli wynik jest dostępny (
yes):Final score: [score](rzeczywisty wynik) - Jeśli wynik nie jest dostępny (
no):Final score: 50(wartość domyślna)
Spróbuj swoich sił
use std::io;
fn main() {
// Wczytaj wynik
let mut score_input = String::new();
io::stdin().read_line(&mut score_input).expect("Failed to read line");
let score: i32 = score_input.trim().parse().expect("Invalid number");
// Wczytaj status dostępności
let mut availability = String::new();
io::stdin().read_line(&mut availability).expect("Failed to read line");
let availability = availability.trim();
// TODO: Napisz swój kod poniżej
// Utwórz Option<i32> na podstawie statusu dostępności
// Użyj .unwrap_or(50), aby uzyskać wynik końcowy
// Wyświetl wynik
println!("Final score: {}", final_score);
}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ę Book2Wprowadzenie 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 kod6Obsługa braku wartości za pomocą „Option”
Czym jest „Option”?Używanie „match” z „Option”is_some() i is_none()Rozpakowywanie „Option”Metoda expectPodawanie wartości domyślnej: unwrap_orPodsumowanie – znajdowanie elementuPoćwicz samodzielnie: Kompilator Rust online