Menu
Coddy logo textTech

Używanie „match” z „Option”

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

Skoro już wiesz, czym jest Option, poznajmy najpopularniejszy i najbardziej jawny sposób obsługi tego typu: użycie wyrażenia match. To podejście wymaga rozważenia obu możliwych przypadków — gdy wartość istnieje i gdy jej nie ma.

Wyrażenie match doskonale współpracuje z Option, ponieważ możesz utworzyć ramiona dla obu wariantów:

let maybe_name = Some("Alice".to_string());

match maybe_name {
    Some(name) => println!("Hello, {}!", name),
    None => println!("Hello, stranger!"),
}

Zwróć uwagę, jak gałąź Some(name) wyodrębnia wartość z wariantu Some. Zmienna name zawiera teraz właściwy String, a nie Option. Nazywa się to destrukturyzacją — wyciągasz wewnętrzną wartość z opakowania.

Gałąź None obsługuje przypadek, w którym nie ma żadnej wartości, umożliwiając podanie alternatywnego zachowania, takiego jak wyświetlenie domyślnego komunikatu lub wykonanie zupełnie innego działania.

challenge icon

Wyzwanie

Łatwy

Otrzymasz imię ucznia jako dane wejściowe. Imię może być obecne w systemie albo może go brakować. Utwórz Option<String>, które zawiera Some(name), jeśli imię nie jest puste, lub None, jeśli imię jest puste. Użyj wyrażenia match, aby obsłużyć oba przypadki i wypisać odpowiedni komunikat.

Wymagania:

  • Wczytaj dane wejściowe jako ciąg znaków (imię ucznia)
  • Usuń białe znaki z danych wejściowych za pomocą .trim()
  • Utwórz zmienną typu Option<String>:
    • Jeśli przycięte imię nie jest puste, przypisz Some(name.to_string())
    • Jeśli przycięte imię jest puste, przypisz None
  • Użyj wyrażenia match, aby obsłużyć oba warianty typu Option
  • W ramieniu Some(name) wypisz: Welcome, [name]!
  • W ramieniu None wypisz: No name provided

Dane wejściowe:

  • Pojedynczy wiersz zawierający imię ucznia albo pusty wiersz

Wyjście:

  • Jeśli podano imię: Welcome, [name]!
  • Jeśli nie podano imienia (puste dane wejściowe): No name provided

Spróbuj swoich sił

use std::io;

fn main() {
    // Odczytaj dane wejściowe
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let name = input.trim();
    
    // TODO: Utwórz Option<String> w zależności od tego, czy name jest puste
    
    // TODO: Użyj wyrażenia match do obsługi przypadków Some i None oraz wypisz 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