Scala Tutorials Part #27 - Higher Order Functions
Originally Posted On : 10 Nov 2017
Higher Order Functions
This is part 27 of the Scala tutorial series. Check here for the full series.
- Functions that takes another Function as a parameter
- Functions that returns another Function
First we will define a
List with some values.
Next, lets define a function that doubles each value that is given to it.
List class has something called a
map function which takes in other function and produces a new
List. We are going to feed our
function to it.
This gives us a list with values
(100, 121, 144, 169). The
map function is a classic example of a higher order function. We can also give it an
anonymous function in case we do not want to define a function explicitly.
In order to fully understand Higher Order functions, its best that we learn to create one ourselves. Let’s create a function that applies a pattern to a given string.
This is an example of a function that takes another function as a parameter.
f is a variable which is of type function and one which takes in a
String and gives out another
String. Next, we will create a function which given a string appends a
<title> tag to it and which can be passed
HTMLStringDecorator this returns a function itself. We can then call the decorator with the title tag appender function.
This might seem simple, but using such patterns we can build powerful DSL based syntax and languages. Higher order functions are just one piece of the puzzle, we still have partially applied functions, closures, currying etc., which can help build systems that make complex patterns much simpler to work with.
We saw a very basic overview of higher order functions. At this point this knowledge should be enough to move forward. But we must remember that with such power comes responsibility and not everything must be dealt with a DSL/Higher order functions. Design and best practices is a completely different area which we will explore in later tutorials.