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
mapifilter.
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.