Kotlin Lambdas

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 Unitnyckelordet 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 nullom 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 trueom 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

Intressanta artiklar...