Kotlin Lambdas

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 Unitkulcsszó 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 nullha 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, trueha 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

érdekes cikkek...