# Scala – Nested Function

In Scala, a function defined inside another function is called nested function or local function. This feature is not supported by Java. In other languages, we can call a function from another function but that is not nested function. Multiple function definitions can be defined inside parent function.Let’s understand this with examples.

#### Example1:

A function named calculation has been written and inside that multiple nested functions have been created as shown below. These nested function will do different calculations and print the result.

```object nestedFunc {

def main(args: Array[String]): Unit = {
//calling Function
calculate(3,2)
}
//Function
def calculate(a:Int,b:Int): Unit ={
//Nested Function
println("Addition of a and b is " + (a + b))
}
//Nested Function
def mul(): Unit ={
println("Multiplication of a and b is " + (a * b))
}
//Nested Function
def sub(): Unit ={
println("Subtraction of a and b is " + (a - b))
}
mul()
sub()
}
}```
``````Output:
Addition of a and b is 5
Multiplication of a and b is 6
Subtraction of a and b is 1``````

A nested function can be defined inside another function and so on. It is called nesting of function. Theoretically, nesting is possible to unlimited depth but practically it id done to few levels.Let’s see an example below where nesting is done till 3rd level.

#### Example2:

```object nestedFunc {

def main(args: Array[String]): Unit = {
//calling Function
CarDetails()
}
//Function
def CarDetails(): Unit ={
model()
//first Nested Function
def model(): Unit ={
println("What is the model of the car?")
color()
//Second Nested Function
def color(): Unit ={
println("What is the color of car?")
price()
//Third Nested Function
def price(): Unit ={
println("What is price of the car?")
}
}
}
}
}```
``````Output:
What is the model of the car?
What is the color of car?
What is price of the car?``````

#### Example3:

In the below example, function is doing factorial of given number. A nested function named fact is defined inside parent function named factorial.

```object NestedFunc2 {

def main(args: Array[String]): Unit = {
println("factorial of 3 is " + factorial(3));
println("factorial of 5 is " + factorial(5));
}

def factorial(x: Int): Int = {
def fact(x: Int, accumulator: Int): Int = {
if (x <= 1) accumulator
else fact(x - 1, x * accumulator)
}
fact(x, 1)
}
}```
``````Output:
factorial of 3 is 6
factorial of 5 is 120`````` Shekhar Sharma

Shekhar Sharma is founder of testingpool.com. This website is his window to the world. He believes that ,"Knowledge increases by sharing but not by saving".