Kotlin Lambdas

Expresii Lambda

Expresia lambda sau pur și simplu lambda este o funcție anonimă; o funcție fără nume. Aceste funcții sunt transmise imediat ca o expresie fără declarație. De exemplu,

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

Când rulați programul, ieșirea va fi:

 Salut!

Aici, o expresie lambda este atribuită salutului variabil. Expresia nu acceptă niciun parametru și nu returnează nicio valoare în acest program.

Apoi, funcția (expresia lambda) este invocată ca:

 Salut() 

Exemplu: Lambda cu parametri și tip de returnare

Programul de mai jos are o expresie lambda care acceptă două numere întregi ca parametri și returnează produsul celor două numere întregi.

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

Când rulați programul, ieșirea va fi:

 27

Aici, expresia lambda este:

Notă, o expresie lambda este închisă în acolade.

Funcție de ordin superior

Koltin are un mare suport pentru programarea funcțională. Puteți trece funcții ca argumente către alte funcții. De asemenea, puteți returna o funcție din alte funcții. Aceste funcții se numesc funcții de ordin superior.

Adesea, expresiile lambda sunt transmise funcției de ordin superior (mai degrabă decât unei funcții tipice) pentru comoditate.

Exemplu: Trecerea Lambda la Funcție

Să trecem o expresie lambda la o funcție de ordin superior. Iată cum o puteți face.

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

Când rulați programul, ieșirea va fi:

 Salut!

Aici callMe()este o funcție de ordin superior (deoarece ia funcția ca parametru). Parametrul de salut acceptă lambda transmisă callMe()funcției ca:

 salut: () -> Unitate

Parantezele goale sugerează că funcția anonimă trecută nu acceptă niciun parametru. Și, Unitcuvântul cheie sugerează că funcția anonimă nu returnează nicio valoare.

Lambdas sunt frecvent utilizate în timp ce lucrați cu colecții. Și, există mai multe funcții încorporate disponibile în biblioteca standard care iau lambdas pentru a ne ușura sarcina. Veți vedea câteva exemple aici:

Exemplu: funcția maxBy ()

Funcția maxBy () returnează primul element care produce cea mai mare valoare a funcției date sau nulldacă nu există elemente.

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

Când rulați programul, ieșirea va fi:

 Persoană (nume = Jack, vârstă = 34) nume: Jack vârstă: 34

Aici, maxBy()funcția ia o listă de obiecte Person și returnează obiectul Person având vârsta maximă.

it Cuvânt cheie: utilizat pentru parametru unic

În programul de mai sus, expresia lambda acceptă un singur parametru (o listă de obiecte Person). În astfel de cazuri, puteți consulta argumentul utilizând cuvânt cheie it.

Puteți înlocui

 val selectedPerson = people.maxBy ((persoană -> person.age))

cu

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

în programul de mai sus.

Exemplu: funcția maxBy () și startsWith ()

Programul de mai jos calculează vârsta maximă a unui obiect Person începând cu litera S.

Vom folosi două funcții de bibliotecă maxBy()și startsWith()pentru a realiza această sarcină. Funcția starsWith () revine truedacă începe cu caracterul specificat trecut ca 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)" ) )

Când rulați programul, ieșirea va fi:

 Persoană (nume = Shane, vârstă = 22) nume: Shane vârstă: 22

Lecturi recomandate

  • Închideri Kotlin
  • Kotlin Cu și aplică

Articole interesante...