Указатели на функции (Function references, Bound callable references)



В языке Kotlin есть возможность работать с функциями как с объектами. Функции можно сохранять в переменные, передавать как аргументы и возвращать из других функций. Для этого можно использовать функциональные ссылки (Function references), которые представляют собой указатель на функцию.



1. Function references



Синтаксис функциональной ссылки имеет следующий вид:
::function_name. Указатели на функции представляют собой сокращенную форму записи вызова функции. Вместо того, чтобы объявлять лямбда-выражение и передавать его как аргумент функции, можно использовать ссылку на существующий метод. Например, у нас есть класс Person с методом getName():



class Person(val name: String) {

fun getName(): String = name

}



Тогда мы можем использовать указатель на метод getName() вместо лямбда-выражения:



val persons = listOf(Person("Alice"), Person("Bob"))

val names = persons.map(Person::getName)



2. Bound callable references



Bound callable references (привязанные ссылки)
— это то же самое понятие, что и указатели на методы, но в случае, когда метод вызывается на экземпляре класса. В этом варианте мы можем использовать ссылку на метод, связанную с конкретным экземпляром класса. Для создания привязанной ссылки на метод используется следующий синтаксис: <object_name>::<method_name>.



Допустим, что у нас есть экземпляр класса person типа Person. Тогда мы можем использовать ссылку на метод getName() для получения его имени:



val person = Person("Alice")

val name = person::getName



Здесь name будет ссылаться на метод getName() объекта person.