Lambda-uttryck
Lambdauttryck eller helt enkelt lambda är en anonym funktion; en funktion utan namn. Dessa funktioner skickas omedelbart som ett uttryck utan deklaration. Till exempel,
fun main(args: Array) ( val greeting = ( println("Hello!")) // invoking function greeting() )
När du kör programmet blir resultatet:
Hej!
Här tilldelas ett lambdauttryck variabel hälsning. Uttrycket accepterar inga parametrar och returnerar inget värde i detta program.
Därefter anropas funktionen (lambdauttryck) som:
hälsning()
Exempel: Lambda med parametrar och returtyp
Programmet nedan har ett lambdauttryck som accepterar två heltal som parametrar och returnerar produkten av dessa två heltal.
fun main(args: Array) ( val product = ( a: Int, b: Int -> a * b ) val result = product(9, 3) println(result) )
När du kör programmet blir resultatet:
27
Här är lambdauttrycket:
Observera att ett lambdauttryck är inneslutet i lockiga hängslen.
Högre ordningsfunktion
Koltin har ett stort stöd för funktionell programmering. Du kan skicka funktioner som argument till andra funktioner. Du kan också returnera en funktion från andra funktioner. Dessa funktioner kallas högre ordningsfunktioner.
Ofta skickas lambdauttryck till högre ordningsfunktion (snarare än en typisk funktion) för enkelhets skull.
Exempel: Att skicka Lambda till funktion
Låt oss skicka ett lambdauttryck till en högre ordningsfunktion. Så här kan du göra det.
fun callMe(greeting: () -> Unit) ( greeting() ) fun main(args: Array) ( callMe(( println("Hello!") )) )
När du kör programmet blir resultatet:
Hej!
Här callMe()
är en högre ordningsfunktion (eftersom den tar funktionen som en parameter). Hälsningsparametern accepterar lambda som skickas till callMe()
funktionen som:
hälsning: () -> Enhet
Den tomma parentesen antyder att den godkända anonyma funktionen inte accepterar några parametrar. Och Unit
nyckelordet föreslår att den anonyma funktionen inte returnerar något värde.
Lambdas används ofta när man arbetar med samlingar. Och det finns flera inbyggda funktioner tillgängliga i standardbiblioteket som tar lambdas för att göra vår uppgift enklare. Du kommer att se några exempel här:
Exempel: maxBy () -funktion
Funktionen maxBy () returnerar det första elementet som ger det största värdet för den givna funktionen eller null
om det inte finns några element.
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)" ) )
När du kör programmet blir resultatet:
Person (namn = Jack, ålder = 34) namn: Jack ålder: 34
Här maxBy()
tar funktionen en lista över personobjekt och returnerar personobjektet som har högsta ålder.
it Nyckelord: Används för enstaka parameter
I ovanstående program accepterar lambdauttrycket bara en parameter (en lista över personobjekt). I sådana fall kan du hänvisa argumentet med hjälp av nyckelord it
.
Du kan ersätta
val selectedPerson = people.maxBy ((person -> person.alder))
med
val selectedPerson = people.maxBy ((it.age))
i ovanstående program.
Exempel: maxBy () och startsWith () -funktion
Programmet nedan beräknar högsta ålder för ett personobjekt som börjar med bokstaven S.
Vi kommer att använda två biblioteksfunktioner maxBy()
och för startsWith()
att utföra denna uppgift. Funktionen starsWith () returnerar true
om den börjar med det angivna tecknet skickat som ett 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)" ) )
När du kör programmet blir resultatet:
Person (namn = Shane, ålder = 22) namn: Shane ålder: 22
Rekommenderade avläsningar
- Kotlin stängningar
- Kotlin med och ansök