Lambda izrazi
Lambda izraz ali preprosto lambda je anonimna funkcija; funkcija brez imena. Te funkcije se takoj posredujejo kot izraz brez izjave. Na primer
fun main(args: Array) ( val greeting = ( println("Hello!")) // invoking function greeting() )
Ko zaženete program, bo rezultat:
Zdravo!
Tu je spremenljivki pozdrav dodeljen lambda izraz. Izraz ne sprejema nobenih parametrov in ne vrne nobene vrednosti v tem programu.
Nato se funkcija (lambda izraz) prikliče kot:
pozdrav ()
Primer: Lambda s parametri in vrnjeno vrsto
Spodnji program ima lambda izraz, ki kot parametra sprejme dve celi števili in vrne zmnožek teh dveh celih števil.
fun main(args: Array) ( val product = ( a: Int, b: Int -> a * b ) val result = product(9, 3) println(result) )
Ko zaženete program, bo rezultat:
27.
Tukaj je lambda izraz:
Upoštevajte, da je lambda izraz zaprt v zavite oklepaje.
Funkcija višjega reda
Koltin ima odlično podporo za funkcionalno programiranje. Funkcije lahko posredujete kot argumente drugim funkcijam. Funkcijo lahko vrnete tudi iz drugih funkcij. Te funkcije se imenujejo funkcije višjega reda.
Pogosto se lambda izrazi zaradi udobja posredujejo funkciji višjega reda (in ne običajni funkciji).
Primer: prenašanje Lambde v funkcijo
Prenosimo lambda izraz v funkcijo višjega reda. Evo, kako to lahko storite.
fun callMe(greeting: () -> Unit) ( greeting() ) fun main(args: Array) ( callMe(( println("Hello!") )) )
Ko zaženete program, bo rezultat:
Zdravo!
Tu callMe()
je funkcija višjega reda (ker funkcijo vzame kot parameter). Parameter pozdrava sprejme lambdo, posredovano callMe()
funkciji, kot:
pozdrav: () -> Enota
Prazne oklepaje kažejo, da posredovana anonimna funkcija ne sprejema nobenih parametrov. In je Unit
ključna beseda kažejo, da je anonimni funkcija ne vrne nobene vrednosti.
Lambde se pogosto uporabljajo pri delu z zbirkami. In v standardni knjižnici je na voljo več vgrajenih funkcij, ki si lambde olajšajo. Tu boste videli nekaj primerov:
Primer: funkcija maxBy ()
Funkcija maxBy () vrne prvi element, ki daje največjo vrednost dane funkcije ali null
če elementov ni.
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)" ) )
Ko zaženete program, bo rezultat:
Oseba (ime = Jack, starost = 34) ime: Jack starost: 34
Tu maxBy()
funkcija vzame seznam predmetov osebe in vrne objekt osebe, ki ima največjo starost.
it Ključna beseda: Uporablja se za en parameter
V zgornjem programu lambda izraz sprejme samo en parameter (seznam predmetov Person). V takih primerih lahko argument uporabite z uporabo ključne besede it
.
Lahko zamenjate
val selectedPerson = people.maxBy ((oseba -> oseba.starost))
s
val selectedPerson = people.maxBy ((it.age))
v zgornjem programu.
Primer: maxBy () in startWith () Funkcija
Spodnji program izračuna največjo starost osebe, ki se začne s črko S.
Uporabili bomo dva knjižničnih funkcij maxBy()
in startsWith()
za izpolnitev te naloge. Funkcija starsWith () se vrne, true
če se začne z navedenim znakom, posredovanim kot 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)" ) )
Ko zaženete program, bo rezultat:
Oseba (ime = Shane, starost = 22) ime: Shane starost: 22
Priporočena branja
- Kotlin zapiranja
- Kotlin S in se prijavi