Kotlins Lambdas

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 Unitatslē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 nullja 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, trueja 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

Interesanti raksti...