Functions as values
We’ve touched on Kotlin’s functional features in earlier chapters focused on design patterns. The Strategy and Command design patterns, for instance, lean heavily on Kotlin’s capacity to handle functions in different ways—like accepting them as arguments, returning them from other functions, storing them as values, or even including them in collections. In this section, we’ll explore additional facets of functional programming in Kotlin, including concepts like function purity and currying.
As we discussed previously, in Kotlin, it’s possible for a function to return another function. Let’s look at the following simple function to understand this syntax in depth:
fun generateMultiply(): (Int, Int) -> Int {
return fun(x: Int, y: Int): Int {
return x * y
}
}
Here, our generateMultiply
function returns another function that doesn’t have a name. Functions without a name are called...