Котлин Ламбдас

Ламбда изрази

Ламбда израз или једноставно ламбда је анонимна функција; функција без имена. Ове функције се предају одмах као израз без декларације. На пример,

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

Када покренете програм, излаз ће бити:

 Здраво!

Овде је ламбда израз додељен променљивом поздраву. Израз не прихвата никакве параметре и не враћа вредност у овом програму.

Затим се функција (ламбда израз) позива као:

 Поздрав() 

Пример: Ламбда са параметрима и типом повратка

Програм у наставку има ламбда израз који прихвата две целобројне вредности као параметре и враћа производ те две целобројне вредности.

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

Када покренете програм, излаз ће бити:

 27

Овде је ламбда израз:

Имајте на уму да је ламбда израз затворен у витичасте заграде.

Функција вишег реда

Колтин има велику подршку за функционално програмирање. Можете проследити функције као аргументе другим функцијама. Такође, можете вратити функцију из других функција. Те функције се називају функцијама вишег реда.

Често се ламбда изрази прослеђују функцији вишег реда (уместо типичној функцији) ради погодности.

Пример: Преношење Ламбде у функцију

Проследимо ламбда израз функцији вишег реда. Ево како то можете учинити.

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

Када покренете програм, излаз ће бити:

 Здраво!

Овде callMe()је функција вишег реда (јер узима функцију као параметар). Параметар поздрављања прихвата ламбда прослеђену callMe()функцији као:

 поздрав: () -> Јединица

Празне заграде сугеришу да прослеђена анонимна функција не прихвата никакве параметре. Кључна Unitреч сугерише да анонимна функција не враћа никакву вредност.

Ламбде се често користе током рада са колекцијама. И, постоји неколико уграђених функција доступних у стандардној библиотеци које узимају ламбде да би нам олакшале задатак. Овде ћете видети неколико примера:

Пример: функција макБи ()

Функција макБи () враћа први елемент који даје највећу вредност дате функције или nullако нема елемената.

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

Када покренете програм, излаз ће бити:

 Особа (име = Јацк, старост = 34) име: Јацк старост: 34

Овде maxBy()функција узима листу објеката Персон и враћа објект Персон који има максималну старост.

ит Кључна реч: Користи се за један параметар

У горе наведеном програму, ламбда израз прихвата само један параметар (списак Персон објеката). У таквим случајевима аргумент можете упутити помоћу кључне речи it.

Можете заменити

 вал селецтедПерсон = пеопле.макБи ((персон -> персон.аге))

са

 вал селецтедПерсон = пеопле.макБи ((ит.аге)) 

у горњем програму.

Пример: макБи () и стартВитх () функција

Програм у наставку израчунава максималну старост објекта Персон који почиње словом С.

Ми ћемо користити две библиотеке функције maxBy()и startsWith()да изврши овај задатак. Функција старсВитх () враћа се trueако започне наведеним знаком прослеђеним као аргумент.

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

Када покренете програм, излаз ће бити:

 Име особе (име = Схане, старост = 22) име: Схане старост: 22

Препоручена читања

  • Котлин Цлосурес
  • Котлин Са и пријавом

Занимљиви Чланци...