0Pricing
Learn Rust Coding · Lekcja

Dopasowywanie wariantów enuma

Użyje Pan/Pani match do obsługi każdego przypadku.

Dopasowywanie wariantów enuma to bezpłatna lekcja Learn Rust Coding na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn Rust Coding, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn Rust Coding zawiera 4 lekcji w sumie.

Poznajemy wyrażenie match

Wyrażenie match porównuje wartość z serią wzorców i wykonuje kod pierwszego pasującego wzorca.

Jest naturalnym partnerem enumów: każdy wariant można obsłużyć w osobnej gałęzi.

enum Light {
    Red,
    Green,
}

fn action(l: Light) {
    match l {
        Light::Red => println!("Stop"),
        Light::Green => println!("Go"),
    }
}

Budowa gałęzi match

Każda gałąź ma postać pattern => expression, a gałęzie są rozdzielone przecinkami.

Wzorzec określa, co należy dopasować, a wyrażenie po => jest wykonywane, gdy dopasowanie się powiedzie. W tym przypadku wzorcem jest pojedynczy wariant enuma.

match light {
    Light::Red => println!("Stop"),
    Light::Green => println!("Go"),
}

Kompletny program z dopasowaniem

Oto kompletny program, który dopasowuje sygnalizację świetlną i wyświetla instrukcję.

Proszę go uruchomić, a następnie zmienić wariant w main, aby zobaczyć wykonanie innej gałęzi.

enum TrafficLight {
    Red,
    Yellow,
    Green,
}

fn main() {
    let light = TrafficLight::Yellow;
    match light {
        TrafficLight::Red => println!("Stop"),
        TrafficLight::Yellow => println!("Slow down"),
        TrafficLight::Green => println!("Go"),
    }
}

match musi być wyczerpujące

Rust wymaga, aby match obejmowało każdy możliwy wariant. Jeśli któregoś zabraknie, program się nie skompiluje.

To potężna funkcja bezpieczeństwa: gdy później zostanie dodany nowy wariant, kompilator przypomni o każdym miejscu, które musi go obsłużyć.

// This would FAIL to compile because
// the Green case is missing:
// match light {
//     Light::Red => println!("Stop"),
// }

Wzorzec zbiorczy z _

Jeśli nie chce Pan(i) wymieniać każdego wariantu, proszę użyć podkreślenia _ jako wzorca zbiorczego. Dopasowuje ono wszystko, czego nie obsłużono wcześniej.

Proszę umieścić je na końcu, ponieważ gałęzie są sprawdzane w kolejności.

enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter,
}

fn main() {
    let c = Coin::Dime;
    match c {
        Coin::Penny => println!("1 cent"),
        _ => println!("Some other coin"),
    }
}

match zwraca wartość

match jest wyrażeniem, więc tworzy wartość, którą można zapisać w zmiennej.

Każda gałąź musi zwracać ten sam typ. Proszę zauważyć, że po wyrażeniu każdej gałęzi nie ma tutaj średnika.

enum Coin {
    Penny,
    Quarter,
}

fn main() {
    let coin = Coin::Quarter;
    let cents = match coin {
        Coin::Penny => 1,
        Coin::Quarter => 25,
    };
    println!("{} cents", cents);
}

Wielowierszowe ciała gałęzi

Gałąź może wykonywać kilka instrukcji, jeśli zostaną one ujęte w nawiasy klamrowe { ... }.

Ostatnie wyrażenie wewnątrz nawiasów jest wartością zwracaną przez gałąź.

match light {
    Light::Red => {
        println!("Caution!");
        println!("Stop the car");
    }
    Light::Green => println!("Go"),
}

Łączenie wzorców za pomocą |

Proszę użyć pionowej kreski |, aby dopasować kilka wariantów w jednej gałęzi. Czyta się ją jako „lub”.

Pozwala to uniknąć powtarzania tego samego ciała dla wariantów, które powinny zachowywać się identycznie.

enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter,
}

fn main() {
    let c = Coin::Nickel;
    match c {
        Coin::Penny | Coin::Nickel => println!("Small coin"),
        _ => println!("Bigger coin"),
    }
}

match a if/else

Można połączyć instrukcje if / else if, aby sprawdzać warianty, ale match jest czytelniejsze i bezpieczniejsze.

W przypadku match kompilator sprawdza, czy obsłużono każdy przypadek. Łańcuch instrukcji if nie daje takiej gwarancji.

Jednoczesne dopasowywanie i wyświetlanie

Typowym wzorcem jest przekształcenie wariantu w przyjazny dla użytkownika tekst i jego wyświetlenie.

Proszę uruchomić ten program i zmienić wybrany kierunek, aby zobaczyć dopasowany komunikat.

enum Direction {
    North,
    South,
    East,
    West,
}

fn main() {
    let d = Direction::West;
    let name = match d {
        Direction::North => "North",
        Direction::South => "South",
        Direction::East => "East",
        Direction::West => "West",
    };
    println!("Heading {}", name);
}

Kolejność ma znaczenie

Gałęzie są sprawdzane od góry do dołu, a pierwsze dopasowanie wygrywa. Pozostałe gałęzie są pomijane.

Dlatego wzorzec zbiorczy _ musi znajdować się na końcu: gdyby był pierwszy, przechwyciłby każdą wartość, zanim mogłyby zostać wykonane konkretne gałęzie.

Szybkie sprawdzenie

Sprawdź swoją wiedzę o match.

Podsumowanie

Nauczył(a) się Pan(i), że match porównuje wartość ze wzorcami i wykonuje pierwszą pasującą gałąź.

Musi być wyczerpujące, może używać _ jako wzorca zbiorczego, łączyć warianty za pomocą | i zwraca wartość, ponieważ jest wyrażeniem. Następnie nada Pan(i) wariantom enuma własne dane.

Często zadawane pytania

Czy lekcja „Dopasowywanie wariantów enuma” jest bezpłatna?

Tak — pełny tekst „Dopasowywanie wariantów enuma” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn Rust Coding, przejdź na CoddyKit PRO. Kurs Learn Rust Coding zawiera 4 lekcji w sumie.

Co nauczysz się w „Dopasowywanie wariantów enuma”?

Użyje Pan/Pani match do obsługi każdego przypadku. Ćwiczysz Learn Rust Coding z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Learn Rust Coding?

Nie wymagamy żadnego doświadczenia. Learn Rust Coding w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Dopasowywanie wariantów enuma”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Learn Rust Coding?

Tak. Każda lekcja Learn Rust Coding zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Definiowanie pierwszego enuma
  2. Dopasowywanie wariantów enuma
  3. Enumy z danymi
  4. Strażnicy dopasowania i wiązania
← Powrót do Learn Rust Coding