Wyrażenia lambda
Wyrażenie lambda lub po prostu lambda to funkcja anonimowa; funkcja bez nazwy. Te funkcje są przekazywane natychmiast jako wyrażenie bez deklaracji. Na przykład,
fun main(args: Array) ( val greeting = ( println("Hello!")) // invoking function greeting() )
Po uruchomieniu programu wynik będzie następujący:
Witaj!
Tutaj do zmiennej powitania przypisane jest wyrażenie lambda. Wyrażenie nie przyjmuje żadnych parametrów i nie zwraca żadnej wartości w tym programie.
Następnie funkcja (wyrażenie lambda) jest wywoływana jako:
Powitanie()
Przykład: Lambda z parametrami i typem zwrotu
Poniższy program zawiera wyrażenie lambda, które przyjmuje dwie liczby całkowite jako parametry i zwraca iloczyn tych dwóch liczb całkowitych.
fun main(args: Array) ( val product = ( a: Int, b: Int -> a * b ) val result = product(9, 3) println(result) )
Po uruchomieniu programu wynik będzie następujący:
27
Tutaj wyrażenie lambda to:
Uwaga, wyrażenie lambda jest zawarte w nawiasach klamrowych.
Funkcja wyższego rzędu
Koltin ma świetne wsparcie dla programowania funkcjonalnego. Możesz przekazywać funkcje jako argumenty do innych funkcji. Możesz także zwrócić funkcję z innych funkcji. Funkcje te nazywane są funkcjami wyższego rzędu.
Często wyrażenia lambda są przekazywane do funkcji wyższego rzędu (zamiast do typowej funkcji) dla wygody.
Przykład: przekazywanie Lambda do funkcji
Przekażmy wyrażenie lambda do funkcji wyższego rzędu. Oto jak możesz to zrobić.
fun callMe(greeting: () -> Unit) ( greeting() ) fun main(args: Array) ( callMe(( println("Hello!") )) )
Po uruchomieniu programu wynik będzie następujący:
Witaj!
Tutaj callMe()
jest funkcja wyższego rzędu (ponieważ przyjmuje funkcję jako parametr). Parametr pozdrowienia akceptuje lambdę przekazaną do callMe()
funkcji jako:
powitanie: () -> Jednostka
Pusty nawias sugeruje, że przekazana funkcja anonimowa nie akceptuje żadnych parametrów. A Unit
słowo kluczowe sugeruje, że funkcja anonimowa nie zwraca żadnej wartości.
Podczas pracy z kolekcjami często używa się jagniąt. Istnieje kilka wbudowanych funkcji dostępnych w bibliotece standardowej, które pobierają lambdy, aby ułatwić nam zadanie. Zobaczysz tutaj kilka przykładów:
Przykład: funkcja maxBy ()
Funkcja maxBy () zwraca pierwszy element dający największą wartość danej funkcji lub null
jeśli nie ma żadnych elementów.
data class Person(val name: String, val age: Int) fun main(args: Array) ( val people = listOf( Person("Jack", 34), Person("Shelly", 19), Person("Patrick", 13), Person("Jill", 12), Person("Shane", 22), Person("Joe", 18) ) val selectedPerson = people.maxBy(( person -> person.age )) println(selectedPerson) println("name: $(selectedPerson?.name)" ) println("age: $(selectedPerson?.age)" ) )
Po uruchomieniu programu wynik będzie następujący:
Osoba (imię = Jack, wiek = 34) imię: Jack wiek: 34
Tutaj maxBy()
function pobiera listę obiektów Person i zwraca obiekt Person mający maksymalny wiek.
it Słowo kluczowe: używane dla pojedynczego parametru
W powyższym programie wyrażenie lambda przyjmuje tylko jeden parametr (listę obiektów Person). W takich przypadkach możesz odnieść się do argumentu za pomocą słowa kluczowego it
.
Możesz wymienić
val selectedPerson = people.maxBy ((person -> person.age))
z
val selectedPerson = people.maxBy ((it.age))
w powyższym programie.
Przykład: funkcja maxBy () i startWith ()
Poniższy program oblicza maksymalny wiek obiektu Person, zaczynając od litery S.
Wykorzystamy dwie funkcje biblioteczne maxBy()
i startsWith()
do wykonania tego zadania. Funkcja starsWith () zwraca, true
jeśli zaczyna się od określonego znaku przekazanego jako argument.
data class Person(val name: String, val age: Int) fun main(args: Array) ( val people = listOf( Person("Jack", 34), Person("Shelly", 19), Person("Patrick", 13), Person("Jill", 12), Person("Shane", 22), Person("Joe", 18) ) val selectedPerson = people .filter ( it.name.startsWith("S") ) .maxBy( it.age ) println(selectedPerson) println("name: $(selectedPerson?.name)" ) println("age: $(selectedPerson?.age)" ) )
Po uruchomieniu programu wynik będzie następujący:
Osoba (imię = Shane, wiek = 22) imię: Shane wiek: 22
Zalecane lektury
- Zamknięcia Kotlin
- Kotlin i aplikuj