Kotlin в IntelliJ IDEA Kotlin змінні Kotlin типи даних Kotlin операції з числами Kotlin умовні вирази Kotlin умовні конструкції Kotlin цикли Kotlin послідовності Kotlin масиви Kotlin функціональне програмування Kotlin змінна кількість параметрів. Vararg Kotlin повернення результату. оператор return Kotlin однорядкові і локальні функції Kotlin перевантаження функцій Kotlin Лямбда-вирази Kotlin функції вищого порядку Kotlin Анонімні функції Kotlin ООП Класи і об'єкти Kotlin ООП властивості Kotlin ООП конструктор Kotlin ООП функції в класах Kotlin ООП Пакети та імпорт Kotlin ООП модифікатори видимості Kotlin ООП вкладені класи Kotlin ООП інтерфейси Kotlin ООП спадкування Kotlin ООП Перевизначення методів і властивостей Kotlin ООП Абстрактні класи та методи Kotlin ООП Data-класи Kotlin ООП перерахування enums Kotlin ООП Null і nullable-типи Kotlin ООП Обробка винятків Kotlin ООП перетворення типів Kotlin ООП Інфіксна функція Kotlin ООП функції розширення Kotlin ООП Узагальнені класи і функції Kotlin ООП обмеження узагальнень Kotlin ООП Варіантність, коваріантність і контраваріантність Kotlin Колекції. Змінювані і незмінні колекції Kotlin Колекції. LIST список Kotlin Колекції. Set Kotlin Колекції. Map

Kotlin Лямбда-вирази


Лямбда-вирази представляють невеликі шматочки коду, які виконують деякі дії. Фактично лямбда преставляют скорочений запис функцій. При цьому лямбда можуть передаватися в якості параметра у функції.

Лямбда-вирази обертаються в фігурні дужки:

{println("hello")}

В даному випадку лямбда-вираз виводить на консоль рядок "hello".

Лямбда-вираз можна зберегти в звичайну змінну і потім викликати через ім'я цієї змінної як звичайну функцію.

fun main(args: Array<String>) {
 
    val hello = {println("hello")}
    hello()
    hello()
}

В даному випадку лямбда збережена в змінну hello і через цю змінну викликається два рази.

Також лямбда-вираз можна виконати відразу при визначенні за допомогою оператора run :

fun main(args: Array<String>) {
 
    run {println("hello")}
}

передача параметрів

Лямбда як і функції можуть приймати параметри. Для передачі параметрів використовується стрілка ->. Параметри вказуються зліва від стрілки, а тіло лямбда-вирази, тобто самі їх дії, праворуч від стрілки.

fun main(args: Array<String>) {
 
    val printer = {message: String -> println(message)}
    printer("Hello")
    printer("Good Bye")
}

Тут лямбда-вираз приймає один параметр типу String, значення якого виводиться на консоль.

Якщо параметрів кілька, то вони передаються зліва від стрілки через кому:

fun main(args: Array<String>) {
 
    val sum = {x:Int, y:Int -> println(x + y)}
    sum(2, 3)   // 5
    sum(4, 5)   // 9
}

Якщо в лямбда-виразі треба виконати не одне, а кілька дій, то ці дії можна розміщувати на окремих рядках після стрілки:

val sum = {x:Int, y:Int ->
    val result = x + y
    println("$x + $y = $result")
}

повернення результату

Вираз, що стоїть після стрілки, визначає результат лямбда-вирази. І цей результат ми можемо привласнити, наприклад, змінної.

Якщо лямбда-вираз формально не повертає ніякого результату, то фактично, як і в функціях, повертається значення типу Unit:

val hello = { println("Hello")}
val h = hello()             // h представляет тип Unit
 
val printer = {message: String -> println(message)}
val p = printer("Welcome")    // p представляет тип Unit

В обох випадках використовується функція println, яка формально не повертає ніякого значення (точніше повертає об'єкт типу Unit).

Але також може повертатися конкретне значення:

fun main(args: Array<String>) {
 
    val sum = {x:Int, y:Int -> x + y}
     
    val a = sum(2, 3)   // 5
    val b = sum(4, 5)   // 9
    println("a=$a  b=$b")
}

Тут вираз праворуч від стрілки x + y продукує нове значення - суму чисел, і при виклику лямбда-вирази це значення можна передати змінної.

Якщо лямбда-вираз многострочное, складається з декількох інструкцій, то повертається то значення, яке генерується останньої інструкцією:

val sum = {x:Int, y:Int ->
    val result = x + y
    println("$x + $y = $result")
    result
}

Останній вираз по суті являє число - суму чисел x і y і воно буде повертатися в якості результату лямбда-вирази.


Наш партнер:
beta test mp3 playlist downloader