# 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"
}
perform(add) // Result is 30
```

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 == '+') {
add
} else if (symbol == '*') {
multiply
}
}
def addOperation = createOperation('+')
perform(addOperation) // Result is 30
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 == '+') {
add
} else if (symbol == '*') {
multiply
}
}
```

You may want to take a look at slides from my FunctionalConf talk for more examples.