Functions
In this section, we will introduce the fundamentals of functional programming, such as function values and high-order functions.
Function Values
What is a function? We are familiar with methods, which must be defined in a scope (class or objects):
def f1(x:Int, y:Int): Int = x + y
In Scala, we can also define a function value:
val f2: (Int,Int) => Int = (x,y) => (x+y).
Here, we
define the function value, with a type of
(Int,Int) => Int
. Of course, as with all type declarations, the type can be omitted if it can be deduced from the context. So, an alternative syntax for this can be:
val f2 = (x:Int,y:Int) => (x+y).
Both
f1(1,2)
and
f2(1,2)
will force evaluation. The difference between
f1
and
f2
is that the second is a value, which can be stored in a variable or passed to another function.
Functions which accept other functions as parameters are named high-order functions, for example:
def twice(f: Int => Int): Int => Int = x => f(f(x))
This function...