0Pricing
Learn Rust Coding · Lekcja

Domknięcia

Funkcje anonimowe

Domknięcia to bezpłatna lekcja Learn Rust Coding na CoddyKit. To lekcja 3 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 domknięcie?

Domknięcie to anonimowa funkcja, którą można przechować w zmiennej i wywołać później. Zapisuje się je z parametrami ujętymi w pionowe kreski.

fn main() {
    let add_one = |x| x + 1;
    println!("{}", add_one(4));
}

Składnia domknięć

Parametry umieszcza się między |...|, a za nimi znajduje się ciało. W przypadku pojedynczego wyrażenia nawiasy klamrowe nie są potrzebne.

  • |x| x + 1 — jeden parametr.
  • |a, b| a + b — dwa parametry.
fn main() {
    let multiply = |a, b| a * b;
    println!("{}", multiply(3, 5));
}

Domknięcia wieloliniowe

Jeśli ciało zawiera więcej niż jedną instrukcję, należy ująć je w nawiasy klamrowe, tak jak w przypadku funkcji.

fn main() {
    let describe = |n: i32| {
        let doubled = n * 2;
        println!("{} doubled is {}", n, doubled);
    };
    describe(7);
}

Przechwytywanie środowiska

W przeciwieństwie do zwykłej funkcji domknięcie może przechwytywać zmienne z otaczającego zakresu i używać ich wewnątrz.

fn main() {
    let factor = 10;
    let scale = |x| x * factor;
    println!("{}", scale(5));
}

Wnioskowanie typów w domknięciach

Domknięcia zwykle wyprowadzają typy parametrów i wartości zwracanej na podstawie sposobu ich użycia, dlatego adnotacje są opcjonalne.

W razie potrzeby można dodać typy dla większej przejrzystości.

fn main() {
    let greet = |name: &str| -> String {
        format!("Hello, {}!", name)
    };
    println!("{}", greet("Rust"));
}

Domknięcia jako argumenty

Wiele standardowych metod przyjmuje domknięcie. Na przykład map stosuje domknięcie do każdego elementu.

fn main() {
    let nums = vec![1, 2, 3];
    let doubled: Vec<i32> = nums.iter().map(|x| x * 2).collect();
    println!("{:?}", doubled);
}

Filtrowanie za pomocą domknięć

Metoda filter zachowuje tylko te elementy, dla których domknięcie zwraca true.

fn main() {
    let nums = vec![1, 2, 3, 4, 5, 6];
    let evens: Vec<i32> = nums.into_iter().filter(|x| x % 2 == 0).collect();
    println!("{:?}", evens);
}

Przechowywanie domknięć

Domknięcia mają unikatowe typy anonimowe, ale można przechowywać je w zmiennej i ponownie używać.

fn main() {
    let is_even = |n: i32| n % 2 == 0;
    println!("{} {}", is_even(4), is_even(7));
}

Domknięcia a funkcje

Różnice:

  • Funkcje nie mogą przechwytywać zmiennych z otaczającego zakresu, a domknięcia mogą.
  • Domknięcia są anonimowe i często krótkie.
  • Typy domknięć są zwykle wyprowadzane automatycznie.
fn main() {
    let base = 100;
    let bonus = |earned: i32| earned + base;
    println!("{}", bonus(25));
}

Zwracanie obliczonych wartości

Połącz domknięcia z iteratorami, aby obliczać wyniki w przejrzystym i wyrazistym potoku.

fn main() {
    let nums = vec![10, 20, 30];
    let total: i32 = nums.iter().map(|x| x + 1).sum();
    println!("total {}", total);
}

Domknięcia przechwytują przez odwołanie

Domyślnie domknięcie pożycza przechwycone zmienne. Nadal można później odczytywać je poza domknięciem, jeśli zostały tylko pożyczone.

fn main() {
    let name = String::from("Ada");
    let printer = || println!("Name: {}", name);
    printer();
    println!("still usable: {}", name);
}

Szybkie sprawdzenie

Przypomnij sobie kluczową możliwość domknięć.

Podsumowanie

Domknięcia w Rust:

  • Anonimowe funkcje zapisywane jako |params| body.
  • Mogą przechwytywać zmienne ze swojego środowiska.
  • Ich typy są zwykle wyprowadzane automatycznie.
  • Są powszechnie używane z metodami iteratorów, takimi jak map i filter.
fn main() {
    let tax = 0.2;
    let with_tax = |price: f64| price * (1.0 + tax);
    println!("{}", with_tax(50.0));
}

Często zadawane pytania

Czy lekcja „Domknięcia” jest bezpłatna?

Tak — pełny tekst „Domknięcia” 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 „Domknięcia”?

Funkcje anonimowe Ć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 3 z 4.

Ile czasu zajmuje lekcja „Domknięcia”?

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 funkcji
  2. Wyrażenia i instrukcje
  3. Domknięcia
  4. Fn, FnMut, FnOnce
← Powrót do Learn Rust Coding