Анонимные функции и Closures (замыкания)

Анонимные функции и Closures (замыкания)

Анонимные функции

Анонимные функции похожи на обычные функции за исключением того, что у них не пишется название. Они могут, как и обычные функции иметь тело или служить для вычисления выражения и возвращения результата:

В примере ниже объявлена функция, которая принимает два параметра: первый должен иметь тип Int, второй имеет тип функции, который принимает один параметр типа Int и возвращает также такой параметр (как в предыдущем примере):

fun anonymTest(param : Int, func : (Int) -> Int)
{
    val result = func(param)
    println(result)
}
Вызываем функцию в качестве второго параметра передаём анонимную функцию, которая полученный параметр умножает на 20 и возвращает:
anonymTest(20, fun(p : Int) : Int {
    return p * 20
})

Замыкания (closure)

val mult = 100

anonymTest(20, fun(p : Int) : Int {
    // Тело функции получает доступ к переменной написанной вне этой функции, что в данном случае и является замыканием
    return p * mult
})