0Pricing
Learn Rust Coding · Lekcja

Strażnicy dopasowania i wiązania

Doda Pan/Pani warunki i przechwyci wartości.

Strażnicy dopasowania i wiązania to bezpłatna lekcja Learn Rust Coding na CoddyKit. To lekcja 4 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.

Czym jest strażnik dopasowania?

Strażnik dopasowania to dodatkowy warunek if dodany do ramienia dopasowania. Ramię zostanie wykonane tylko wtedy, gdy wzorzec pasuje i warunek jest prawdziwy.

Umożliwia podzielenie jednego wariantu na bardziej szczegółowe przypadki na podstawie jego danych.

match number {
    Some(n) if n > 0 => println!("positive"),
    Some(n) => println!("zero or negative"),
    None => println!("no number"),
}

Składnia strażnika

Najpierw zapisz wzorzec, następnie if condition, a potem =>. Warunek może używać dowolnych zmiennych związanych przez wzorzec.

Jeśli strażnik ma wartość false, Rust przechodzi do kolejnego ramienia.

fn main() {
    let n = 4;
    match n {
        x if x % 2 == 0 => println!("even"),
        _ => println!("odd"),
    }
}

Strażniki z danymi enumu

Strażniki są najbardziej przydatne w enumach przechowujących dane. Wiążesz wewnętrzną wartość, a następnie ją sprawdzasz.

W tym przykładzie dodatnie i ujemne saldo otrzymują różne komunikaty, mimo że oba należą do tego samego wariantu.

enum Account {
    Balance(i32),
    Closed,
}

fn main() {
    let a = Account::Balance(-5);
    match a {
        Account::Balance(b) if b < 0 => println!("overdrawn"),
        Account::Balance(b) => println!("balance {}", b),
        Account::Closed => println!("closed"),
    }
}

Kolejność nadal ma znaczenie

Ponieważ ramiona są sprawdzane od góry do dołu, umieść bardziej szczegółowe ramię ze strażnikiem przed ogólnym.

Gdyby zwykłe ramię Balance(b) znajdowało się wcześniej, pasowałoby do wszystkiego, a ramię ze strażnikiem nigdy nie zostałoby wykonane.

Dopasowywanie wartości literałowych

Możesz również bezpośrednio dopasowywać konkretne literały we wzorcu, bez strażnika.

Tutaj wartości 0 i 1 są dopasowywane dokładnie, a _ obsługuje całą resztę.

fn main() {
    let n = 1;
    match n {
        0 => println!("zero"),
        1 => println!("one"),
        _ => println!("many"),
    }
}

Dopasowywanie zakresów

Wzorce mogą dopasowywać zakres wartości za pomocą ..=, który obejmuje oba końce.

To przejrzysta alternatywa dla kilku strażników porównań.

fn main() {
    let score = 85;
    match score {
        0..=59 => println!("fail"),
        60..=100 => println!("pass"),
        _ => println!("out of range"),
    }
}

Wiązanie za pomocą operatora @

Operator @ pozwala sprawdzić wartość względem wzorca i jednocześnie powiązać ją z nazwą.

Tutaj id @ 1..=5 sprawdza zakres i zapisuje rzeczywistą wartość w id, aby można było ją wyświetlić.

fn main() {
    let n = 3;
    match n {
        id @ 1..=5 => println!("small id {}", id),
        other => println!("other {}", other),
    }
}

Wiązanie całej wartości

Zwykła nazwa we wzorcu, taka jak other powyżej, wiąże całą wartość. Działa jak przypadek obejmujący wszystko, z którego nadal można korzystać.

Użyj _, gdy chcesz zignorować wartość, a nazwy — gdy jej potrzebujesz.

fn main() {
    let n = 99;
    match n {
        0 => println!("zero"),
        value => println!("got {}", value),
    }
}

Połączenie strażników i wiązań

Możesz połączyć wiązanie ze strażnikiem, aby uzyskać precyzyjną kontrolę: powiązać dane, a następnie dodać warunek.

Ten program wyróżnia duże parzyste salda.

enum Account {
    Balance(i32),
}

fn main() {
    let a = Account::Balance(200);
    match a {
        Account::Balance(b) if b > 100 && b % 2 == 0 => println!("big even {}", b),
        Account::Balance(b) => println!("normal {}", b),
    }
}

Strażniki dla wielu wzorców

Strażnik dotyczy całego ramienia, nawet gdy ramię łączy wzorce za pomocą |.

Warunek jest sprawdzany po dopasowaniu dowolnego z wymienionych wzorców.

fn main() {
    let n = 6;
    match n {
        2 | 4 | 6 if n > 3 => println!("big even"),
        _ => println!("other"),
    }
}

Połączenie wszystkich elementów

Ten końcowy program łączy warianty z danymi, wiązanie, strażnika i przypadek obejmujący wszystko, aby sklasyfikować odczyt temperatury.

Zmień wartość i uruchom program ponownie, aby zobaczyć wykonanie różnych ramion.

enum Reading {
    Temp(i32),
    Missing,
}

fn main() {
    let r = Reading::Temp(38);
    match r {
        Reading::Temp(t) if t >= 38 => println!("fever: {}", t),
        Reading::Temp(t) => println!("normal: {}", t),
        Reading::Missing => println!("no reading"),
    }
}

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat strażników i wiązań.

Podsumowanie

Dowiedziałeś się, jak doprecyzowywać dopasowania za pomocą strażników (pattern if condition), dopasowywać literały i zakresy (..=) oraz tworzyć wiązania za pomocą nazw lub operatora @.

W połączeniu ze wszystkim, czego nauczyłeś się wcześniej, możesz teraz modelować stałe zestawy stanów, dołączać do nich dane i precyzyjnie reagować na każdy przypadek. Świetna praca z enumami i match!

Często zadawane pytania

Czy lekcja „Strażnicy dopasowania i wiązania” jest bezpłatna?

Tak — pełny tekst „Strażnicy dopasowania i wiązania” 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 „Strażnicy dopasowania i wiązania”?

Doda Pan/Pani warunki i przechwyci wartości. Ć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 4 z 4.

Ile czasu zajmuje lekcja „Strażnicy dopasowania i wiązania”?

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