is_some() i is_none()
Część sekcji Logika i przepływ programu ścieżki Rust w Coddy. Lekcja 37 z 66.
Czasami trzeba sprawdzić, czy Option zawiera wartość, bez faktycznego wyodrębniania tej wartości. Rust udostępnia do tego dwie wygodne metody: .is_some() i .is_none().
Obie metody zwracają wartość logiczną, dzięki czemu doskonale nadają się do użycia w warunkach if:
let maybe_score = Some(85);
if maybe_score.is_some() {
println!("We have a score!");
}
if maybe_score.is_none() {
println!("No score available");
}Metoda .is_some() zwraca true, jeśli Option zawiera wartość Some, a false, jeśli zawiera None. Metoda .is_none() działa odwrotnie — zwraca true dla None i false dla Some.
Wyzwanie
ŁatwyOtrzymasz liczbę jako dane wejściowe. Utwórz Option<i32>, która zawiera Some(number), jeśli liczba jest dodatnia, lub None, jeśli liczba jest równa zero lub ujemna. Użyj .is_some() i .is_none(), aby sprawdzić Option i wypisać odpowiedni komunikat.
Wymagania:
- Odczytaj dane wejściowe i przekonwertuj je na
i32 - Utwórz zmienną typu
Option<i32>:- Jeśli liczba jest dodatnia (większa od 0), przypisz
Some(number) - Jeśli liczba jest równa zero lub ujemna, przypisz
None
- Jeśli liczba jest dodatnia (większa od 0), przypisz
- Użyj
.is_some(), aby sprawdzić, czyOptionzawiera wartość - Jeśli
.is_some()zwracatrue, wypisz:Positive number detected - Użyj
.is_none(), aby sprawdzić, czyOptionjest pusta - Jeśli
.is_none()zwracatrue, wypisz:No positive number
Dane wejściowe:
- Pojedyncza liczba całkowita (np.
42,0lub-5)
Wynik:
- Jeśli liczba jest dodatnia:
Positive number detected - Jeśli liczba jest równa zero lub ujemna:
No positive number
Spróbuj swoich sił
use std::io;
fn main() {
// Wczytaj dane wejściowe
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let number: i32 = input.trim().parse().expect("Invalid input");
// TODO: Napisz swój kod poniżej
// Utwórz Option<i32> w zależności od tego, czy liczba jest dodatnia
// Sprawdź, czy Option ma wartość Some, i wypisz 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ę 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