0Pricing
Kotlin Academy · Lekcja

Przekazywanie lambd do funkcji

Przekazuj lambdy jako argumenty i korzystaj ze składni lambdy końcowej.

Przekazywanie lambd do funkcji to bezpłatna lekcja Kotlin Academy 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 Kotlin Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Funkcje przyjmujące lambdy

Funkcja wyższego rzędu to funkcja, która przyjmuje funkcję (na przykład lambdę) jako parametr. W ten sposób działają map, filter i forEach.

Deklarowanie funkcji wyższego rzędu

Jako typ parametru należy użyć typu funkcyjnego.
fun applyTwice(n: Int, op: (Int) -> Int): Int {
    return op(op(n))
}
println(applyTwice(3, { it * 2 }))  // 12

Składnia lambdy końcowej

Jeśli ostatni parametr jest funkcją, lambdę można przenieść poza nawiasy. Jest to składnia „trailing lambda”.
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))

// Standard:
applyTwice(3, { it * 2 })
// Trailing lambda:
applyTwice(3) { it * 2 }

Lambda końcowa bez nawiasów

Gdy lambda jest JEDYNYM argumentem, można całkowicie pominąć nawiasy.
fun execute(block: () -> Unit) = block()

// With parens:
execute({ println("Hello") })
// Without parens (idiomatic):
execute { println("Hello") }

Przekazywanie zmiennej zawierającej lambdę

Zapisaną referencję do lambdy można przekazać, używając nazwy jej zmiennej.
val double = { n: Int -> n * 2 }
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))
println(applyTwice(5, double))  // 20

Referencje do funkcji z użyciem ::

Za pomocą :: można przekazać nazwaną funkcję jako argument zgodny z lambdą.
fun triple(n: Int) = n * 3
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))
println(applyTwice(2, ::triple))  // 18

Wiele parametrów lambda

Funkcja może przyjmować wiele parametrów lambda. Tylko ostatni z nich może korzystać ze składni lambdy na końcu.
fun transform(
    value: Int,
    before: (Int) -> Int,
    after: (Int) -> Int
) = after(before(value))

println(transform(5, { it * 2 }, { it + 1 }))  // 11

Przekazywanie lambdy do filter

filter przyjmuje lambdę predykatową — funkcję odwzorowującą element na wartość Boolean.
val numbers = listOf(1, 2, 3, 4, 5, 6)
val evens = numbers.filter { it % 2 == 0 }
println(evens)  // [2, 4, 6]

Łączenie funkcji wyższego rzędu

Łącz wywołania wielu funkcji wyższego rzędu, aby tworzyć czytelne potoki przetwarzania danych.
val result = (1..10)
    .filter { it % 2 != 0 }  // odds
    .map { it * it }          // square
    .take(3)                  // first 3
println(result)  // [1, 9, 25]

Przechwytywanie zmiennych przez lambdę

Lambdy mogą przechwytywać zmienne z otaczającego zakresu (domknięcia). W Kotlinie mogą nawet przechwytywać i modyfikować var.
var total = 0
listOf(1, 2, 3, 4).forEach { total += it }
println(total)  // 10

Zwracanie lambdy z funkcji

Funkcje wyższego rzędu mogą również zwracać lambdy, tworząc funkcje fabrykujące.
fun multiplierOf(factor: Int): (Int) -> Int {
    return { n -> n * factor }
}
val double = multiplierOf(2)
val triple = multiplierOf(3)
println(double(5))  // 10
println(triple(5))  // 15

Szybkie sprawdzenie

Kiedy można przenieść lambdę poza nawiasy, korzystając ze składni lambdy na końcu?

Podsumowanie

Funkcje wyższego rzędu przyjmują lambdy jako parametry. Składnia lambdy na końcu przenosi lambdę poza nawiasy, gdy jest ona ostatnim parametrem. :: przekazuje referencje do nazwanych funkcji. Dalej: niejawny parametr „it”!

Często zadawane pytania

Czy lekcja „Przekazywanie lambd do funkcji” jest bezpłatna?

Tak — pełny tekst „Przekazywanie lambd do funkcji” 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 Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Przekazywanie lambd do funkcji”?

Przekazuj lambdy jako argumenty i korzystaj ze składni lambdy końcowej. Ćwiczysz Kotlin Academy 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ąć Kotlin Academy?

Nie wymagamy żadnego doświadczenia. Kotlin Academy 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 „Przekazywanie lambd do funkcji”?

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 Kotlin Academy?

Tak. Każda lekcja Kotlin Academy 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. Czym jest lambda? Składnia i typy
  2. Przekazywanie lambd do funkcji
  3. it: parametr niejawny
  4. filter, map i find dla kolekcji
← Powrót do Kotlin Academy