0Pricing
Learn Rust Coding · Lekcja

if let i while let

Zwięzłe dopasowywanie

if let i while let 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.

Zwięzłe dopasowywanie

Czasami interesuje Państwa tylko jeden wzorzec. if let i while let umożliwiają zwięzłe dopasowywanie bez pełnego match.

Postać if let

if let wykonuje blok tylko wtedy, gdy wartość pasuje do wzorca, wiążąc wszystkie przechwycone dane.

fn main() {
    let maybe = Some(10);
    if let Some(n) = maybe {
        println!("value is {n}");
    }
}

if let a match

if let jest skróconą postacią match z jednym interesującym ramieniem i przejściem _ => (). Należy go używać, gdy pozostałe przypadki nie wymagają obsługi.

fn main() {
    let config: Option<i32> = None;
    // match equivalent would have an empty _ arm
    if let Some(v) = config {
        println!("configured: {v}");
    }
    println!("done");
}

Dodawanie else

Dodaj else, aby obsłużyć przypadek braku dopasowania.

fn main() {
    let result: Result<i32, String> = Err("boom".to_string());
    if let Ok(v) = result {
        println!("ok: {v}");
    } else {
        println!("failed");
    }
}

let else

let ... else wiąże wartości, gdy wzorzec pasuje, a w przeciwnym razie wykonuje blok rozbieżny (np. return). Jest świetny do wczesnego wychodzenia.

fn parse(s: &str) -> i32 {
    let Ok(n) = s.parse::<i32>() else {
        println!("not a number");
        return 0;
    };
    n * 2
}

fn main() {
    println!("{}", parse("21"));
    println!("{}", parse("oops"));
}

Postać while let

while let powtarza pętlę tak długo, jak długo wartość pasuje do wzorca. Doskonale nadaje się na przykład do opróżniania stosów.

fn main() {
    let mut stack = vec![1, 2, 3];
    while let Some(top) = stack.pop() {
        println!("popped {top}");
    }
}

Iterowanie po iteratorach

while let może iterować, wielokrotnie wywołując next i zatrzymując się, gdy zwróci ono None.

fn main() {
    let mut iter = [10, 20, 30].into_iter();
    while let Some(x) = iter.next() {
        println!("{x}");
    }
}

Strażnicy z if let

Strażnika można dodać za pomocą warunku && (Rust 2024) lub przez zagnieżdżenie instrukcji if.

fn main() {
    let value = Some(8);
    if let Some(n) = value {
        if n > 5 {
            println!("big: {n}");
        }
    }
}

Kiedy używać którego rozwiązania

Wskazówki:

  • if let — obsługa jednego wzorca i pomijanie pozostałych
  • let else — wiązanie wartości lub wczesne wyjście
  • while let — wykonywanie pętli, dopóki wzorzec pasuje
  • match — gdy trzeba obsłużyć wiele przypadków

Kompromis dotyczący czytelności

Te konstrukcje ograniczają ilość kodu pomocniczego, ale mogą ukrywać przypadki. Jeśli okaże się, że obsługują Państwo kilka wzorców, należy wrócić do pełnego match dla zachowania czytelności.

Zagnieżdżanie if let

Można łączyć wartości opcjonalne, zagnieżdżając if let i rozwijając je warstwa po warstwie.

fn main() {
    let outer: Option<Option<i32>> = Some(Some(99));
    if let Some(inner) = outer {
        if let Some(value) = inner {
            println!("value is {value}");
        }
    }
}

Szybkie sprawdzenie

Która konstrukcja wielokrotnie wykonuje treść pętli, dopóki wartość pasuje do wzorca?

Podsumowanie

Poznano zwięzłe dopasowywanie:

  • if let obsługuje pojedynczy wzorzec, opcjonalnie z else
  • let else wiąże wartości lub wcześnie wykonuje blok rozbieżny
  • while let wykonuje pętlę, dopóki wzorzec pasuje
  • Należy przełączyć się na match, gdy trzeba obsłużyć wiele przypadków

Często zadawane pytania

Czy lekcja „if let i while let” jest bezpłatna?

Tak — pełny tekst „if let i while let” 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 „if let i while let”?

Zwięzłe dopasowywanie Ć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 „if let i while let”?

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. match — szczegółowe omówienie
  2. if let i while let
  3. Wiązanie za pomocą @
  4. Destrukturyzacja
← Powrót do Learn Rust Coding