# Scala | Function Composition

Function composition is a way in which a function is mixed with other functions. During the composition the one function holds the reference to another function in order to fulfill it’s mission.
There are some different ways in which a function composition can take place, as below :-

• compose : Composing method works with val functions.
Syntax :

```(function1 compose function2)(parameter)
```

In the above syntax function2 works first with the parameter passed & then passes then returns a value to be passed to function1.

Example 1:

 `// A Scala program to illustrate  ` `// compose method with val function ` ` `  `// Creatin object ` `object` `GFG ` `{ ` `    ``// Main method  ` `    ``def` `main(args``:` `Array[String])  ` `    ``{  ` `        ``println((add compose mul)(``2``)) ` `         `  `        ``// adding more methods ` `        ``println((add compose mul compose sub)(``2``)) ` `    ``}  ` `     `  `    ``val` `add``=``(a``:` `Int)``=>` `{ ` `        ``a + ``1` `    ``} ` `     `  `    ``val` `mul``=``(a``:` `Int)``=>` `{ ` `        ``a * ``2` `    ``} ` `     `  `    ``val` `sub``=``(a``:` `Int) ``=>``{ ` `        ``a - ``1` `    ``} ` `} `

Output :

```5
3
```

In above example, firstly mul function called we got 4(2 * 2) than add function called and we got 5(4 + 1). similarly (add compose mul compose sub)(2) will print 3 (step1 : 2 – 1 = 1, step2 : 1 * 2 = 2, step3 : 2 + 1 = 3).

• andThen : andThen method also works with val functions.
Syntax :

```(function1 andThen function2)(parameter)
```

In the above syntax function1 works first with the parameter passed & then passes then returns a value to be passed to function2.
or as same as below:

```function2(function1(parameter))
```

Example 2:

 `// A Scala program to illustrate  ` `//andThen method with val function ` ` `  `// Creating object ` `object` `GFG  ` `{ ` `    ``// Main method  ` `    ``def` `main(args``:` `Array[String])  ` `    ``{  ` `        ``println((add andThen mul)(``2``)) ` `         `  `        ``// Adding more methods ` `        ``println((add andThen mul andThen sub)(``2``)) ` `    ``}  ` `     `  `    ``val` `add``=``(a``:` `Int)``=>` `{ ` `        ``a + ``1` `    ``} ` `     `  `    ``val` `mul``=``(a``:` `Int)``=>` `{ ` `        ``a * ``2` `    ``} ` `     `  `    ``val` `sub``=``(a``:` `Int) ``=>``{ ` `        ``a - ``1` `    ``} ` `}  `

Output :

```6
5
```

In above example, firstly add function called we got 3(2 + 1) than mul function called and we got 6(3 * 2). similarly add (andThen mul andThen sub)(2)) will print 5 (step1 : 2 + 1 = 3, step2 : 3 * 2 = 6, step3 : 6 – 1 = 5).

Function composition is more like composing methods into another or passing to other methods. To do more control on methods we can use more ways as below:-

• Passing methods to methods : Methods are passed to other methods.
Syntax :

```function1(function2(parameter))
```

It works as same as compose function, but it works with def and val methods.
Example 3:

 `// A Scala program to illustrate  ` `// passing methods to methods ` ` `  `// Creating object ` `object` `GFG  ` `{ ` `    ``// Main method  ` `    ``def` `main(args``:` `Array[String])  ` `    ``{  ` `        ``println(add(mul(``2``))) ` `         `  `        ``// Adding more methods ` `        ``println(add(mul(sub(``2``)))) ` `    ``}  ` `     `  `    ``val` `add``=``(a``:` `Int)``=>` `{ ` `        ``a + ``1` `    ``} ` `     `  `    ``val` `mul``=``(a``:` `Int)``=>` `{ ` `        ``a * ``2` `    ``} ` `     `  `    ``val` `sub``=``(a``:` `Int) ``=>``{ ` `        ``a - ``1` `    ``} ` `}  `

Output :

```5
3
```

In above example, firstly mul function called we got 4(2 * 2) than add function called and we got 5(4 + 1). similarly add(mul(sub(2)) will print 3 (step1 : 2 – 1 = 1, step2 : 1 * 2 = 2, step3 : 2 + 1 = 3).

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.