Kotlin Lambdas

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 Unitsł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 nulljeś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, truejeś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

Interesujące artykuły...