Scala - High Order Function (Function as parameter or return object)

About

Higher order functions are functions that take a function as a parameter or return functions.

Functions in functional programming are higher order functions since following actions can be performed with them.

  • Functions can be passed within functions as arguments.
  • Functions can be created within functions just as objects can be created in functions
  • Functions can be returned from functions

Example

// sum() returns a function that takes two integers and returns an integer  
def sum(f: Int => Int): (Int, Int) => Int = {  
  def sumf(a: Int, b: Int): Int = {...}  
  sumf  
} 

// same as above. Its type is (Int => Int) => (Int, Int) => Int  
def sum(f: Int => Int)(a: Int, b: Int): Int = { ... } 

// Called like this
sum((x: Int) => x * x * x)          // Anonymous function, i.e. does not have a name  
sum(x => x * x * x)                 // Same anonymous function with type inferred

def cube(x: Int) = x * x * x  
sum(x => x * x * x)(1, 10) // sum of cubes from 1 to 10
sum(cube)(1, 10)           // same as above     

Function as parameter

val numbers = List(1,2,3,4,5,6,7,8,9,10)
val total = numbers.foldLeft(0){(a,b) => a+b }

where the unction “foldLeft” is provided by Scala library on collections.


Powered by ComboStrap