Sobes.tech
Middle

Jak działają wyrażenia lambda w języku programowania Kotlin?

sobes.tech AI

Odpowiedź od AI

Wyrażenia lambda w Kotlinie reprezentują funkcje anonimowe. Mogą być przekazywane jako argumenty lub przechowywane w zmiennych.

Kluczowe punkty:

  • Składnia: Nawiasy {}. Parametry są wskazywane przed strzałką ->, ciało funkcji po niej. Jeśli nie ma parametrów, strzałka jest opcjonalna.
  • Domyślna nazwa parametru it: Jeśli lambda ma jeden parametr, nie trzeba go deklarować jawnie, będzie dostępny pod nazwą it.
  • Wartość zwracana: Ostatnie wyrażenie w ciele lambdy jest jej wartością zwracaną.
  • Zamknięcia (Closures): Lambdy mogą uzyskiwać dostęp i modyfikować zmienne z zakresu, w którym zostały zdefiniowane.

Przykłady:

// Lambda bez parametrów
val hello = { println("Hello, world!") }
hello() // Wywołanie lambdy

// Lambda z jednym parametrem (jawne deklarowanie)
val square = { number: Int -> number * number }
println(square(5))

// Lambda z jednym parametrem (użycie 'it')
val increment = { it + 1 }
println(increment(10))

// Lambda z wieloma parametrami
val sum = { a: Int, b: Int -> a + b }
println(sum(2, 3))

// Lambda jako argument funkcji wyższego rzędu
fun operate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
    return operation(a, b)
}
println(operate(4, 5, { x, y -> x * y })) // Przekazanie lambdy

Porównanie z funkcjami anonimowymi (bardziej szczegółowe):

Cecha Wyrażenie lambda Funkcja anonimowa
Składnia {} fun (...)
Wartość zwracana Ostatnie wyrażenie Jawne return
return wewnątrz Zwraca z funkcji nadrzędnej (retour non-lokalny) Zwraca z funkcji anonimowej (lokalny return)
Użycie it Tak (dla jednego parametru) Nie

Lambdy są szeroko stosowane w Kotlinie, szczególnie z funkcjami wyższego rzędu (map, filter, forEach itd.), aby tworzyć zwięzły i wyrazisty kod. Kompilator optymalizuje ich użycie.