Chapter 4. Functional Programming
The term functional programming refers to a style of coding that favors immutability, is easy to make concurrent when using pure functions, uses transformations over looping, and uses filters over conditional statements. This book uses functional approaches throughout, especially in Chapters 5, 6, and 13. Many of the functions used by Kotlin in functional programming, like map and filter, are discussed where they arise in individual recipes of those chapters and others.
This chapter contains recipes that involve functional features that are either unique to Kotlin (as opposed to Java), like tail recursion, or are implemented somewhat differently, like the fold and reduce functions.
4.1 Using fold in Algorithms
Problem
You want to implement an iterative algorithm in a functional way.
Solution
Use the fold function to reduce a sequence or collection to a single value.
Discussion
The fold function is a reduction operation that can be applied to arrays or iterables. The syntax of the function is given by the following:
inlinefun<R>Iterable<T>.fold(initial:R,operation:(acc:R,T)->R):R
The same function is defined on Array, as well as all the typed arrays, like IntArray, DoubleArray, and so on.
The idea is that fold takes two parameters: an initial value for the accumulator, and a function of two arguments that returns a new value for the accumulator. The classic example of a fold operation is a sum. See Example 4-1.