Lambda izteicieni
Lambda izteiksme vai vienkārši lambda ir anonīma funkcija; funkcija bez nosaukuma. Šīs funkcijas tiek nekavējoties nodotas kā izteiksme bez deklarēšanas. Piemēram,
fun main(args: Array) ( val greeting = ( println("Hello!")) // invoking function greeting() )
Palaidot programmu, izeja būs:
Sveiki!
Šeit mainīgajam sveicienam tiek piešķirta lambda izteiksme. Izteiksme nepieņem parametrus un neatgriež nevienu vērtību šajā programmā.
Tad funkcija (lambda izteiksme) tiek izsaukta kā:
sveiciens ()
Piemērs: Lambda ar parametriem un atgriešanās veidu
Zemāk esošajai programmai ir lambda izteiksme, kas par parametriem pieņem divus veselus skaitļus un atgriež šo divu veselu skaitļu reizinājumu.
fun main(args: Array) ( val product = ( a: Int, b: Int -> a * b ) val result = product(9, 3) println(result) )
Palaidot programmu, izeja būs:
27
Lambda izteiksme ir šāda:
Ņemiet vērā, ka cirtaino lencīšu iekšpusē ir ievietota lambda izteiksme.
Augstāka pasūtījuma funkcija
Koltinam ir liels atbalsts funkcionālai programmēšanai. Funkcijas kā argumentus varat nodot citām funkcijām. Varat arī atgriezt funkciju no citām funkcijām. Šīs funkcijas sauc par augstākas kārtas funkcijām.
Bieži vien ērtības labad lambda izteiksmes tiek nodotas augstākas pakāpes funkcijai (nevis tipiskai funkcijai).
Piemērs: Lambda nodošana funkcijai
Nodosim lambda izteiksmi augstākas kārtas funkcijai. Lūk, kā jūs to varat izdarīt.
fun callMe(greeting: () -> Unit) ( greeting() ) fun main(args: Array) ( callMe(( println("Hello!") )) )
Palaidot programmu, izeja būs:
Sveiki!
Šeit callMe()
ir augstākas pakāpes funkcija (jo tā izmanto funkciju kā parametru). Apsveikuma parametrs pieņem callMe()
funkcijai nodoto lambda kā:
apsveikums: () -> Vienība
Tukšās iekavas liecina, ka nodotā anonīmā funkcija nepieņem parametrus. Un, jo Unit
atslēgvārds liecina, ka anonīma funkcija neatgriež nekādu vērtību.
Strādājot ar kolekcijām, lambdas tiek bieži izmantotas. Standarta bibliotēkā ir pieejamas vairākas iebūvētas funkcijas, kas izmanto lambdas, lai padarītu mūsu uzdevumu vieglāku. Šeit jūs redzēsiet pāris piemērus:
Piemērs: funkcija maxBy ()
Funkcija maxBy () atgriež pirmo elementu, iegūstot lielāko dotās funkcijas vērtību vai null
ja elementu nav.
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)" ) )
Palaidot programmu, izeja būs:
Personas (vārds = Džeks, vecums = 34) vārds: Džeka vecums: 34
Šeit maxBy()
funkcija ņem personu objektu sarakstu un atgriež objektu Persona ar maksimālo vecumu.
it Atslēgvārds: Izmanto vienam parametram
Iepriekš minētajā programmā lambda izteiksme pieņem tikai vienu parametru (Person objektu sarakstu). Šādos gadījumos jūs varat atsaukties uz argumentu, izmantojot atslēgvārdu it
.
Jūs varat aizstāt
val selectedPerson = people.maxBy ((person -> person.age))
ar
val selectedPerson = people.maxBy ((it.age))
iepriekšminētajā programmā.
Piemērs: maxBy () un sākas ar () funkciju
Zemāk esošajā programmā tiek aprēķināts objekta Persona maksimālais vecums, sākot ar S burtu.
Mēs izmantosim divas bibliotēkas funkcijas, maxBy()
un startsWith()
, lai veiktu šo uzdevumu. Funkcija starsWith () atgriežas, true
ja tā sākas ar norādīto rakstzīmi, kas nodota kā arguments.
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)" ) )
Palaidot programmu, izeja būs:
Personas (vārds = Šeins, vecums = 22) vārds: Šeinas vecums: 22
Ieteicamie lasījumi
- Kotlina slēgšana
- Kotlin Ar un piesakies