Kotlinas Lambdas

Lambda išraiškos

Lambda išraiška arba tiesiog lambda yra anoniminė funkcija; funkcija be pavadinimo. Šios funkcijos nedelsiant perduodamos kaip išraiška be deklaracijos. Pavyzdžiui,

 fun main(args: Array) ( val greeting = ( println("Hello!")) // invoking function greeting() )

Kai paleisite programą, išvestis bus:

 Sveiki!

Čia kintamajam sveikinimui priskiriama lambda išraiška. Išraiška nepriima jokių parametrų ir negrąžina jokios vertės šioje programoje.

Tada funkcija (lambda išraiška) iškviečiama kaip:

 sveikinimas () 

Pavyzdys: „Lambda“ su parametrais ir grąžinimo tipu

Žemiau esančioje programoje yra lambda išraiška, kuri priima du sveikus skaičius kaip parametrus ir grąžina tų dviejų skaičių skaičių sandaugą.

 fun main(args: Array) ( val product = ( a: Int, b: Int -> a * b ) val result = product(9, 3) println(result) )

Kai paleisite programą, išvestis bus:

 27

Čia lambda išraiška yra:

Atkreipkite dėmesį, kad „lambda“ išraiška yra įdėta į garbanotas petnešas.

Aukštesnio lygio funkcija

„Koltin“ puikiai palaiko funkcinį programavimą. Galite perduoti funkcijas kaip argumentus kitoms funkcijoms. Be to, galite grąžinti funkciją iš kitų funkcijų. Šios funkcijos vadinamos aukštesnės eilės funkcijomis.

Dažnai patogumo dėlei lambda išraiškos perduodamos aukštesnės eilės funkcijai (o ne tipinei funkcijai).

Pavyzdys: „Lambda“ perdavimas funkcijai

Perduokime lambda išraišką aukštesnės eilės funkcijai. Štai kaip jūs galite tai padaryti.

 fun callMe(greeting: () -> Unit) ( greeting() ) fun main(args: Array) ( callMe(( println("Hello!") )) )

Kai paleisite programą, išvestis bus:

 Sveiki!

Čia callMe()yra aukštesnės eilės funkcija (nes ji naudoja funkciją kaip parametrą). Sveikinimo parametras priima callMe()funkcijai perduotą lambda kaip:

 sveikinimas: () -> vienetas

Tušti skliaustai rodo, kad perduota anoniminė funkcija nepriima jokių parametrų. Ir, The Unitraktažodis rodo, kad anoniminis funkcija negrąžina jokios vertės.

Lambda dažnai naudojama dirbant su kolekcijomis. Standartinėje bibliotekoje yra keletas integruotų funkcijų, kurios naudoja lambdas, kad mūsų užduotis būtų lengviau. Čia pamatysite keletą pavyzdžių:

Pavyzdys: funkcija „maxBy ()“

Funkcija „maxBy“ () grąžina pirmąjį elementą, suteikiantį didžiausią nurodytos funkcijos vertę arba nulljei elementų nėra.

 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)" ) )

Kai paleisite programą, išvestis bus:

 Asmens (vardas = Džekas, amžius = 34) vardas: Džeko amžius: 34

Čia maxBy()funkcija paima objektų „Asmuo“ sąrašą ir grąžina objektą „Asmuo“, turinčio maksimalų amžių.

it Raktinis žodis: naudojamas vienam parametrui

Pirmiau pateiktoje programoje lambda išraiška priima tik vieną parametrą (Asmens objektų sąrašą). Tokiais atvejais galite nurodyti argumentą naudodami raktinį žodį it.

Galite pakeisti

 val selectedPerson = people.maxBy ((asmuo -> asmuo. amžius))

su

 val pasirinktasPerson = people.maxBy ((it.age)) 

minėtoje programoje.

Pavyzdys: funkcija „maxBy ()“ ir „StartWith“ ()

Žemiau pateikta programa apskaičiuoja maksimalų asmens objekto amžių, prasidedantį raide S.

Mes naudosime dvi bibliotekos funkcijas maxBy()ir startsWith()atlikti šią užduotį. Funkcija starsWith () grąžinama, truejei ji prasideda nurodytu simboliu, perduotu kaip argumentas.

 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)" ) )

Kai paleisite programą, išvestis bus:

 Asmens (vardas = Shane, amžius = 22) vardas: Shane amžius: 22

Rekomenduojami skaitiniai

  • Kotlino uždarymai
  • Kotlinas su ir kreipkitės

Įdomios straipsniai...