Lambda väljendid
Lambda väljend või lihtsalt lambda on anonüümne funktsioon; funktsioon ilma nimeta. Need funktsioonid edastatakse kohe avalduseta avalduseta. Näiteks,
fun main(args: Array) ( val greeting = ( println("Hello!")) // invoking function greeting() )
Programmi käivitamisel on väljund järgmine:
Tere!
Siin omistatakse muutuvale tervitusele lambda väljend. Avaldis ei aktsepteeri ühtegi parameetrit ega tagasta selles programmis väärtust.
Seejärel kutsutakse funktsiooni (lambda avaldis) järgmiselt:
tervitus ()
Näide: parameetrite ja tagastuse tüübiga lambda
Allpool oleval programmil on lambda avaldis, mis võtab parameetritena vastu kaks täisarvu ja tagastab nende kahe täisarvu korrutise.
fun main(args: Array) ( val product = ( a: Int, b: Int -> a * b ) val result = product(9, 3) println(result) )
Programmi käivitamisel on väljund järgmine:
27
Siin on lambda väljend:
Pange tähele, et lambda väljend on suletud lokkide sisse.
Kõrgema järgu funktsioon
Koltinil on funktsionaalse programmeerimise jaoks suur tugi. Funktsioonid saate argumentidena teistele funktsioonidele edastada. Samuti saate funktsiooni tagastada teistest funktsioonidest. Neid funktsioone nimetatakse kõrgema järgu funktsioonideks.
Sageli edastatakse lambda-väljendid mugavuse huvides kõrgema järgu funktsioonile (mitte tüüpilisele funktsioonile).
Näide: Lambda edastamine funktsioonile
Andkem lambda avaldis kõrgema järgu funktsioonile. Siit saate teada, kuidas saate seda teha.
fun callMe(greeting: () -> Unit) ( greeting() ) fun main(args: Array) ( callMe(( println("Hello!") )) )
Programmi käivitamisel on väljund järgmine:
Tere!
Siin callMe()
on kõrgemat järku funktsioon (kuna see võtab funktsiooni parameetrina). Tervitusparameeter aktsepteerib callMe()
funktsioonile edastatud lambda järgmiselt:
tervitus: () -> Üksus
Tühjad sulgud viitavad sellele, et edastatud anonüümne funktsioon ei aktsepteeri ühtegi parameetrit. Ja Unit
märksõna viitab sellele, et anonüümne funktsioon ei tagasta väärtust.
Kollektsioonidega töötamisel kasutatakse sageli lambdasid. Ja standardraamatukogus on saadaval mitu sisseehitatud funktsiooni, mis muudavad lambdad meie ülesande lihtsamaks. Siin näete paari näidet:
Näide: funktsioon Funktsioon maxBy ()
Funktsioon maxBy () tagastab esimese elemendi, mis annab antud funktsiooni suurima väärtuse või null
kui elemente pole.
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)" ) )
Programmi käivitamisel on väljund järgmine:
Isiku (nimi = Jack, vanus = 34) nimi: Jacki vanus: 34
Siin maxBy()
võtab funktsioon loendi isikobjektidest ja tagastab maksimaalse vanusega objekti objekt isik.
it Märksõna: kasutatakse ühe parameetri jaoks
Ülaltoodud programmis aktsepteerib lambda avaldis ainult ühte parameetrit (Isiku objektide loend). Sellistel juhtudel saate argumendile viidata märksõna abil it
.
Saate asendada
val selectedPerson = inimesed.maxBy ((inimene -> inimene.vanus))
koos
val selectedPerson = inimesed.maxBy ((it.age))
ülaltoodud programmis.
Näide: funktsioon Funktsioon maxBy () ja algab ()
Allpool olev programm arvutab S-tähega algava objekti Objekti maksimaalse vanuse.
Me kasutame kaks raamatukogu funktsioonid maxBy()
ja startsWith()
selle ülesande täitmiseks. Funktsioon starsWith () naaseb, true
kui see algab argumendina edastatud määratud märgiga.
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)" ) )
Programmi käivitamisel on väljund järgmine:
Isiku (nimi = Shane, vanus = 22) nimi: Shane vanus: 22
Soovitatavad lugemised
- Kotlini sulgurid
- Kotlin Koos ja kandideeri