Lambda kifejezések
A lambda kifejezés vagy egyszerűen a lambda névtelen funkció; név nélküli függvény. Ezeket a függvényeket azonnal deklaráció nélküli kifejezésként adjuk át. Például,
fun main(args: Array) ( val greeting = ( println("Hello!")) // invoking function greeting() )
A program futtatásakor a kimenet a következő lesz:
Szia!
Itt egy lambda kifejezés van hozzárendelve a változó üdvözléshez. A kifejezés nem fogad el semmilyen paramétert és nem ad vissza értéket ebben a programban.
Ezután a függvényt (lambda kifejezés) a következőként hívják meg:
üdvözlet()
Példa: Lambda paraméterekkel és visszatérési típussal
Az alábbi program rendelkezik egy lambda kifejezéssel, amely két egész számot fogad el paraméterként, és ennek a két egésznek a szorzatát adja vissza.
fun main(args: Array) ( val product = ( a: Int, b: Int -> a * b ) val result = product(9, 3) println(result) )
A program futtatásakor a kimenet a következő lesz:
27.
Itt a lambda kifejezés:
Megjegyzés: a göndör zárójelek közé lambda kifejezés tartozik.
Magasabb rendű funkció
A Koltin nagy támogatást nyújt a funkcionális programozáshoz. A függvényeket argumentumként átadhatja más függvényeknek. Ezenkívül más funkciókból is visszaadhat egy függvényt. Ezeket a függvényeket magasabb rendű függvényeknek nevezzük.
Gyakran a lambda kifejezéseket a kényelem érdekében átadják a magasabb rendű függvénynek (nem pedig egy tipikus függvénynek).
Példa: A Lambda átadása a funkciónak
Átadjuk a lambda kifejezést egy magasabb rendű függvénynek. Így teheti meg.
fun callMe(greeting: () -> Unit) ( greeting() ) fun main(args: Array) ( callMe(( println("Hello!") )) )
A program futtatásakor a kimenet a következő lesz:
Szia!
Itt callMe()
van egy magasabb rendű függvény (mert a függvényt paraméterként veszi fel). Az üdvözlő paraméter elfogadja a callMe()
függvénynek átadott lambda- t:
üdvözlet: () -> Egység
Az üres zárójel arra utal, hogy az átadott névtelen függvény nem fogad el semmilyen paramétert. És a Unit
kulcsszó azt sugallja, hogy az anonim függvény nem ad vissza értéket.
A lambdákat gyakran használják a gyűjteményekkel való munka során. A standard könyvtárban számos olyan beépített funkció áll rendelkezésre, amelyek a lambdákat veszik igénybe, hogy megkönnyítsék a feladatunkat. Itt láthat néhány példát:
Példa: maxBy () függvény
A maxBy () függvény visszaadja az első elemet, amely az adott függvény legnagyobb értékét adja, vagy null
ha nincs elem.
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)" ) )
A program futtatásakor a kimenet a következő lesz:
Személy (név = Jack, életkor = 34) név: Jack életkor: 34
Itt a maxBy()
function felveszi a Személy objektumok listáját, és visszaadja a Személy objektumot, amelynek maximális életkora van.
it Kulcsszó: Egyetlen paraméterhez használható
A fenti programban a lambda kifejezés csak egy paramétert (a Person objektumok listáját) fogad el. Ilyen esetekben a kulcsszó segítségével hivatkozhat az argumentumra it
.
Cserélheti
val selectedPerson = people.maxBy ((személy -> személy.kor))
val vel
val selectedPerson = people.maxBy ((it.age))
a fenti programban.
Példa: maxBy () és startWith () függvénnyel
Az alábbi program kiszámítja az S betűvel kezdődő Személy objektumok maximális életkorát.
Két könyvtári funkciót fogunk használni, maxBy()
és startsWith()
ennek a feladatnak a végrehajtásához. A starsWith () függvény akkor tér vissza, true
ha az argumentumként megadott karakterrel kezdődik.
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)" ) )
A program futtatásakor a kimenet a következő lesz:
Személy (név = Shane, életkor = 22) név: Shane életkor: 22
Ajánlott olvasmányok
- Kotlin bezárások
- Kotlin With és jelentkezz