Lambda-expressies
Lambda-expressie of simpelweg lambda is een anonieme functie; een functie zonder naam. Deze functies worden onmiddellijk zonder declaratie als uitdrukking doorgegeven. Bijvoorbeeld,
fun main(args: Array) ( val greeting = ( println("Hello!")) // invoking function greeting() )
Wanneer u het programma uitvoert, is de uitvoer:
Hallo!
Hier wordt een lambda-uitdrukking toegewezen aan een variabele begroeting. De expressie accepteert geen parameters en retourneert geen waarde in dit programma.
Vervolgens wordt de functie (lambda-uitdrukking) aangeroepen als:
groet()
Voorbeeld: Lambda met parameters en retourtype
Het onderstaande programma heeft een lambda-uitdrukking die twee gehele getallen als parameters accepteert, en het product van die twee gehele getallen retourneert.
fun main(args: Array) ( val product = ( a: Int, b: Int -> a * b ) val result = product(9, 3) println(result) )
Wanneer u het programma uitvoert, is de uitvoer:
27
Hier is de lambda-uitdrukking:
Merk op dat een lambda-uitdrukking tussen accolades staat.
Functie van hogere orde
Koltin heeft een geweldige ondersteuning voor functioneel programmeren. U kunt functies als argumenten doorgeven aan andere functies. U kunt ook een functie uit andere functies retourneren. Deze functies worden functies van hogere orde genoemd.
Vaak worden lambda-expressies voor het gemak doorgegeven aan een hogere-orde-functie (in plaats van een typische functie).
Voorbeeld: Lambda doorgeven aan Function
Laten we een lambda-uitdrukking doorgeven aan een functie van hogere orde. Hier leest u hoe u het kunt doen.
fun callMe(greeting: () -> Unit) ( greeting() ) fun main(args: Array) ( callMe(( println("Hello!") )) )
Wanneer u het programma uitvoert, is de uitvoer:
Hallo!
Hier callMe()
is een functie van hogere orde (omdat deze functie als parameter aanneemt). De begroetingsparameter accepteert de lambda die aan de callMe()
functie is doorgegeven als:
begroeting: () -> Eenheid
De lege haakjes suggereren dat de doorgegeven anonieme functie geen parameters accepteert. En het Unit
sleutelwoord suggereert dat de anonieme functie geen waarde retourneert.
Lambda's worden vaak gebruikt bij het werken met collecties. En er zijn verschillende ingebouwde functies beschikbaar in de standaardbibliotheek die lambda's gebruiken om onze taak veel gemakkelijker te maken. U ziet hier een aantal voorbeelden:
Voorbeeld: maxBy () Functie
De functie maxBy () retourneert het eerste element dat de grootste waarde van de gegeven functie oplevert of null
als er geen elementen zijn.
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)" ) )
Wanneer u het programma uitvoert, is de uitvoer:
Persoon (naam = Jack, leeftijd = 34) naam: Jack leeftijd: 34
Hier neemt de maxBy()
functie een lijst met Persoon-objecten en retourneert het Persoon-object met de maximale leeftijd.
it Trefwoord: gebruikt voor enkele parameter
In het bovenstaande programma accepteert de lambda-uitdrukking slechts één parameter (een lijst met persoonsobjecten). In dergelijke gevallen kunt u het argument verwijzen met behulp van een trefwoord it
.
U kunt vervangen
val selectedPerson = people.maxBy ((person -> person.age))
met
val selectedPerson = people.maxBy ((it.age))
in het bovenstaande programma.
Voorbeeld: maxBy () en startsWith () Functie
Het onderstaande programma berekent de maximale leeftijd van een persoonsobject beginnend met de letter S.
We zullen twee bibliotheekfuncties gebruiken maxBy()
en startsWith()
om deze taak uit te voeren. De functie starsWith () retourneert true
als het begint met het opgegeven teken dat als argument is doorgegeven.
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)" ) )
Wanneer u het programma uitvoert, is de uitvoer:
Persoon (naam = Shane, leeftijd = 22) naam: Shane leeftijd: 22
Aanbevolen metingen
- Kotlin sluitingen
- Kotlin With en pas toe