Kotlin Fundamentals · Довідка
Продовження довідки «Функції» — функції як значення.
() -> Unit // без параметрів, нічого не повертає
(Int) -> String // один параметр Int, повертає String
(Int, Int) -> Int // два параметри, повертає Int
((Int, Int) -> Int)? // nullable функціональний тип
val sum: (Int, Int) -> Int = { x: Int, y: Int -> x + y }
val sum2 = { x: Int, y: Int -> x + y } // тип виведено автоматично
sum(2, 3) // 5
| Частина | Значення |
|---|---|
до -> | параметри лямбди |
після -> | тіло; останній вираз — результат (без return) |
Функція, що приймає іншу функцію як параметр (або повертає функцію):
fun operate(a: Int, b: Int, op: (Int, Int) -> Int): Int {
return op(a, b)
}
operate(3, 4, { x, y -> x + y }) // 7
Якщо лямбда — останній аргумент, її виносять за дужки виклику:
operate(3, 4) { x, y -> x + y }
// якщо лямбда — єдиний аргумент, дужки прибирають повністю
run { println("Привіт") }
Для лямбди з одним параметром ім'я можна не писати:
repeatAction(3) { println(it) }
fun isEven(n: Int) = n % 2 == 0
check(4, ::isEven) // замість { n -> isEven(n) }
val ref: (Int) -> Boolean = ::isEven // можна зберегти в змінну
| Вид посилання | Приклад | Коли |
|---|---|---|
| на функцію верхнього рівня | ::isEven | функція оголошена поза класом |
| bound-посилання на метод об'єкта | foo::toString | розглянемо разом з класами |
| на конструктор | ::ClassName | розглянемо разом з класами |
(A, B) -> C{ x -> x + 1 }::, що перетворює наявну функцію на значення функціонального типуДжерело: Kotlin Docs — Higher-order functions and lambdas
← Усі уроки