# Groovy Functional Programming - Higher Order Functions

Lets create a closure which adds two numbers.

``````def add = { number1, number2 ->
number1 + number2
}
``````

If you are not familiar with closures, this article has the necessary details.

Let's create a function which accepts this closure and invokes it by passing two numbers.

``````def perform(def operation) {
def number1 = 10
def number2 = 20
def result = operation(number1, number2)
println "Result is \$result"
}
``````

Note that I opted to express `perform` as a function. You are free to define a closure instead. Since `perform` acccepts another closure as an argument, it becomes a higher order function.

Similary we can create another closure `multiply` which can be passed as an argument to `perform` to multiply the numbers.

``````def multiply = { number1, number2 ->
number1 * number2
}
perform(multiply) // Result is 200
``````

Also we can define higher order functions that return closures.

``````def createOperation = { String symbol ->
if (symbol == '+') {
} else if (symbol == '*') {
multiply
}
}

def multiplyOperation = createOperation('*')
perform(multiplyOperation) // Result is 200
``````

We could improve this code by moving the definitions of `add` and `multiply` closures into `createOperation`.

``````def createOperation = { String symbol ->
def add = { number1, number2 ->
number1 + number2
}
def multiply = { number1, number2 ->
number1 * number2
}
if (symbol == '+') {