Во-первых, если я вас правильно понимаю, ваш вопрос звучит так: «Почему в Котлине есть функции первоклассных граждан - И когда их использовать как таковые?», Верно?
Функции Kotlin являются первоклассными, что означает, что они могут храниться в переменных и структурах данных, передаваться в качестве аргументов и возвращаться из других функций более высокого порядка.Вы можете работать с функциями любым способом, который возможен для других не функциональных значений.( см. Здесь )
Как указано в документации, одним из вариантов использования являются функции высшего порядка .В качестве первого шага я оставлю здесь ссылку на википедию: https://en.wikipedia.org/wiki/Higher-order_function
По сути, функция высшего порядка - это функция, которая принимает функции в качестве параметров или возвращает функцию .Это означает, что функция высшего порядка имеет по крайней мере один параметр типа функции или возвращает значение типа функции .
Следуя короткому примеруфункция высшего порядка, которая получает параметр типа функции (Int) -> Boolean
:
fun foo(pred: (Int) -> Boolean) : String = if(pred(x)) "SUCCESS" else "FAIL"
Эта функция высшего порядка теперь может вызываться с любой функцией (Int) -> Boolean
.
В документах также указывается ... [может использоваться] любым способом, который возможен для других не функциональных значений .
Это означает, что вы можете, например, назначать различные функциипеременная, в зависимости от вашего текущего контекста.
Например:
// This example is verbose on purpose ;)
var checker: (Int) -> Boolean
if (POSITIVE_CHECK) {
checker = { x -> x > 0 } // Either store this function ...
} else {
checker = { x -> x < 0 } // ... or this one ...
}
if (checker(someNumber)) { // ... and use whatever function is now stored in variable "checker" here
print("Check was fine")
}
(код не проверен)