Scala | Functions Call-by-Name

In Scala when arguments pass through call-by-value function it compute the passed-in expression’s or arguments value once before calling the function . But a call-by-Name function in Scala calls the expression and recompute the passed-in expression’s value every time it get accessed inside the function. Here example are shown with difference and syntax.

Call-by-value

This method uses in-mode semantics. Changes made to formal parameter do not get transmitted back to the caller. Any modifications to the formal parameter variable inside the called function or method affect only the separate storage location and will not be reflected in the actual parameter in the calling environment. This method is also called as call by value.

Syntax :



def callByValue(x: Int)
filter_none

edit
close

play_arrow

link
brightness_4
code

// Scala program of function call-by-value
  
// Creating object
object GFG 
{
    // Main method
    def main(args: Array[String]) 
    {
        // Defined function
        def ArticleCounts(i: Int) 
        {
            println("Tanya did article " +
                    "on day one is 1 - Total = " + i)
            println("Tanya did article " +
                    "on day two is 1 - Total = " + i)
            println("Tanya did article "
                    "on day three is 1 - Total = " + i)
            println("Tanya did article " +
                    "on day four is 1 - Total = " + i)
        }
  
        var Total = 0;
          
        // function call
        ArticleCounts 
        {
            Total += 1 ; Total
              
        }
    }
}

chevron_right


Output:

Tanya did article on day one is 1 - Total = 1
Tanya did article on day two is 1 - Total = 1
Tanya did article on day three is 1 - Total = 1
Tanya did article on day four is 1 - Total = 1

Here, by using function call-by-value mechanism in above program total count of article not increased.

Call-by-Name

A call-by-name mechanism passes a code block to the function call and the code block is complied, executed and calculated the value. message will be printed first than returns the value.
Syntax :

def callByName(x: => Int)

Example :

filter_none

edit
close

play_arrow

link
brightness_4
code

// Scala program of function call-by-name
  
// Creating object
object main 
{
    // Main method
    def main(args: Array[String])
    {
        // Defined function call-by-name
        def ArticleCounts(i: => Int) 
        {
            println("Tanya did articles "
                    " on day one is 1 - Total = " + i)
            println("Tanya did articles "
                    "on day two is 1 - Total = " + i)
            println("Tanya did articles "
                    "on day three is 1 - Total = " + i)
            println("Tanya did articles "
                    "on day four is 1 - Total = " + i)
        }
  
        var Total = 0;
          
        // calling function
        ArticleCounts 
        {
            Total += 1 ; Total
        }
}
}

chevron_right


Output:

Tanya did articles  on day one is 1 - Total = 1
Tanya did articles on day two is 1 - Total = 2
Tanya did articles on day three is 1 - Total = 3
Tanya did articles on day four is 1 - Total = 4

Here, by using function call-by-name mechanism in above program total count of article will increased.
Another program of function call-by-name.

Example :

filter_none

edit
close

play_arrow

link
brightness_4
code

// Scala program of function call-by-name
  
// Creating object
object GFG
{
    // Main method
    def main(args: Array[String])
    {
        def something() = 
        {
            println("calling something")
            1 // return value
        }
          
        // Defined function
        def callByName(x: => Int) = 
        {
            println("x1=" + x)
            println("x2=" + x) 
        }
          
        // Calling function
        callByName(something)
    }
}

chevron_right


Output:

calling something
x1=1
calling something
x2=1


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.