Lambda Expressions
Lambdauttrykk eller bare lambda er en anonym funksjon; en funksjon uten navn. Disse funksjonene overføres umiddelbart som et uttrykk uten erklæring. For eksempel,
fun main(args: Array) ( val greeting = ( println("Hello!")) // invoking function greeting() )
Når du kjører programmet, vil utdataene være:
Hallo!
Her tildeles et lambdauttrykk variabel hilsen. Uttrykket godtar ikke noen parametere og returnerer ingen verdi i dette programmet.
Deretter påkalles funksjonen (lambdauttrykk) som:
hilsen()
Eksempel: Lambda med parametere og returtype
Programmet nedenfor har et lambdauttrykk som aksepterer to heltall som parametere, og returnerer produktet av de to heltallene.
fun main(args: Array) ( val product = ( a: Int, b: Int -> a * b ) val result = product(9, 3) println(result) )
Når du kjører programmet, vil utdataene være:
27
Her er lambdauttrykket:
Merk at et lambdauttrykk er lukket inne i krøllete bukseseler.
Høyere ordensfunksjon
Koltin har stor støtte for funksjonell programmering. Du kan overføre funksjoner som argumenter til andre funksjoner. Du kan også returnere en funksjon fra andre funksjoner. Disse funksjonene kalles høyere ordensfunksjoner.
Ofte blir lambdauttrykk sendt til høyere ordensfunksjon (i stedet for en typisk funksjon) for enkelhets skyld.
Eksempel: Overføring av Lambda til funksjon
La oss overføre et lambdauttrykk til en høyere ordensfunksjon. Slik kan du gjøre det.
fun callMe(greeting: () -> Unit) ( greeting() ) fun main(args: Array) ( callMe(( println("Hello!") )) )
Når du kjører programmet, vil utdataene være:
Hallo!
Her callMe()
er en høyere ordensfunksjon (fordi den tar funksjonen som parameter). Hilsenparameteren godtar lambda sendt til callMe()
funksjonen som:
hilsen: () -> Enhet
Den tomme parentesen antyder at den godkjente anonyme funksjonen ikke godtar noen parametere. Og Unit
nøkkelordet antyder at den anonyme funksjonen ikke gir noen verdi.
Lambdas brukes ofte mens du arbeider med samlinger. Og det er flere innebygde funksjoner tilgjengelig i standardbiblioteket som tar lambdas for å gjøre oppgaven enklere. Du vil se noen eksempler her:
Eksempel: maxBy () -funksjon
Funksjonen maxBy () returnerer det første elementet som gir den største verdien av den gitte funksjonen, eller null
hvis det ikke er noen elementer.
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 kjører programmet, vil utdataene være:
Person (navn = Jack, alder = 34) navn: Jack alder: 34
Her maxBy()
tar funksjonen en liste over personobjekter og returnerer personobjektet som har maksimal alder.
it Nøkkelord: Brukes for enkeltparameter
I programmet ovenfor godtar lambdauttrykket bare én parameter (en liste over personobjekter). I slike tilfeller kan du henvise argumentet ved å bruke nøkkelord it
.
Du kan erstatte
val valgtPerson = personer.maxBy ((person -> person.alder))
med
val valgtPerson = people.maxBy ((it.age))
i programmet ovenfor.
Eksempel: maxBy () og startsMed () -funksjon
Programmet nedenfor beregner maksimal alder for et personobjekt som begynner med bokstaven S.
Vi vil bruke to biblioteksfunksjoner maxBy()
og for startsWith()
å utføre denne oppgaven. Funksjonen starsWith () returnerer true
hvis den starter med det angitte tegnet som er sendt som et 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 kjører programmet, vil utdataene være:
Person (navn = Shane, alder = 22) navn: Shane alder: 22
Anbefalte målinger
- Kotlin-stengninger
- Kotlin med og søk