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
- Definiowanie pierwszego enuma
- Dopasowywanie wariantów enuma
- Enumy z danymi
- Strażnicy dopasowania i wiązania