SlideShare une entreprise Scribd logo
1  sur  17
   Functions In Scala  


                                         Janmejani
                                     Software Consultant    
                                    Knoldus Software LLP
AGENDA
●
    What is Functions.

●
    Local Functions.

●
    First Class Function

●
    Placeholders

●
    Partially Applied Functions

●
    Closures

●
    Repeated Parameters

●
    Tail Recursion
What is Function
➢
    A function is a group of statements that together perform a task.

➢
    When program gets larger, you need some way to divide them
    into smaller more manageable pieces.

➢
    How you divide is up to you, but logically each function perform
     a specific task.
Difference Between Functions And
                   Methods
    Functions                       Methods
➢
    Functions have independent      ➢
                                        Methods do not have
    existence means they can be         independent existence
    defined outside of the class.       they are always defined
                                        with in class.
                                    ➢
                                        Methods are called using
➢
    Functions are called                instance or object.
    independently.
Functions Declaration And Definition

def functionName ([list of parameters]) : [return type]

def functionName ([list of parameters]) : [return type] = {
       function body
       return [expr]
     }

def addInt( a:Int, b:Int ) = {
    var sum = 0
    sum = a + b
    sum
  }
Calling Functions
Following is the standard way to call a
method:

object Test {
   def main(args: Array[String]) {
   println( "Returned Value : " + addInt(5,7) )
   }

    def addInt( a:Int, b:Int ) : a+b
}
Local Functions

Scala allows you to define functions inside a function are called local
functions.

    def factorial(i: Int): Int = {
      def fact(i: Int, factor: Int): Int = {
        if (i <= 1)
           factor
        else
           fact(i - 1, i * factor)
      }
      fact(i, 1)
    }
}
First Class Functions

Scala supports first-class functions,which means you can express
functions in function literal syntax,

 ie. , (x: Int) => x + 1,

A function literal is compiled into a class that when instantiated at run-
time is a function value.

 For eg :

   var increase = (x: Int) => x + 1

   increase(10)
Functions Applied On Functions

foreach:

   It takes a function as an argument and invokes that function on each of
   its elements.

For eg:
           val someNumbers = List(-11, -10, -5, 0, 5, 10)

           SomeNumbers foreach((x: Int) => println(x))
Filters:

   Scala provides a number of ways to leave out redundant information.

   This method selects those elements of a collection that pass a test the
   user supplies.

       For eg:
          someNumbers.filter(x => x > 0)

           someNumbers.filter(_> 0)

   To make a function literal even more concise, you can use underscores
   as placeholders for one or more parameters, so long as each parameter
   appears only one time within the function literal.
Partially Applied Functions
Replace the entire list of parameter.
 For example, rather than writing println(_), you could write println _.

   val someNumbers = List(-11, -10, -5, 0, 5, 10)

   someNumbers.foreach(println _)

A partially applied function is an expression in which you don’t supply all of
the arguments needed by the function. Instead, you supply some, or none, of
the needed arguments.
Closures
 A closure is a function whose return value depends on the value of one or
more variables declared outside this function.
  For eg:
    val multiplier = (i:Int) => i * 10
➢
  A statement with no free variable is called close term.

    val multiplier = (i:Int) => i * factor
➢
  A statement with free variable is called open term.

factor is a free variable
i is a bound variable

The function value (the object) that’s created at runtime from this function
literal is called a closure.
REPEATED PARAMETERS
Scala allows you to indicate that the last parameter to a function may be
Repeated.

This allows clients to pass variable length argument lists to the
Function.

 For eg:
      def Size(is: Int*) = is.length
      println(Size(2,3,4,5,6,67))

To denote a repeated parameter, place an asterisk after the type of
the parameter.
Tail Recursion
In order for a recursive call to be tail recursive, the call back to the function
must be the last action performed in the function.

   def factorial(number:Int) : Int = {
    if (number == 1)
    return 1
        number * factorial (number - 1)
        }
   println(factorial(5))

This is not a tail recursive Function, because the total returned from the
recursive call is being multiplied by number, the recursive call is NOT the
last action performed in the function.
To take this example and make it tail recursive, we must make sure that last
             action performed in the function is the recursive call.


def factorial(fact: Int, number: Int) : Int = {
        if(number == 1)
         return fact
        factorial(number * fact, number - 1)
}
print(factorial(1,5))
Why Tail Recursion?

In the recursion example, notice how the result of each call must be
remembered, to do this each recursive call requires an entry on the stack
until all recursive calls have been made. This makes the recursive call more
expensive in terms of memory.

While in the tail recursive example, there are no intermediate values that
need to be stored on the stack, the intermediate value is always passed back
as a parameter.
Functions In Scala: Local, First Class, Partially Applied & Tail Recursive

Contenu connexe

Tendances

Looping statements in Java
Looping statements in JavaLooping statements in Java
Looping statements in JavaJin Castor
 
Data Driven Framework in Selenium
Data Driven Framework in SeleniumData Driven Framework in Selenium
Data Driven Framework in SeleniumKnoldus Inc.
 
Java basic tutorial by sanjeevini india
Java basic tutorial by sanjeevini indiaJava basic tutorial by sanjeevini india
Java basic tutorial by sanjeevini indiaSanjeev Tripathi
 
jQuery Fundamentals
jQuery FundamentalsjQuery Fundamentals
jQuery FundamentalsGil Fink
 
Unit Testing in Python
Unit Testing in PythonUnit Testing in Python
Unit Testing in PythonHaim Michael
 
Mocking in Java with Mockito
Mocking in Java with MockitoMocking in Java with Mockito
Mocking in Java with MockitoRichard Paul
 
Test-Driven Development
Test-Driven DevelopmentTest-Driven Development
Test-Driven DevelopmentJohn Blum
 
Strings in Java
Strings in Java Strings in Java
Strings in Java Hitesh-Java
 
Effective testing with pytest
Effective testing with pytestEffective testing with pytest
Effective testing with pytestHector Canto
 
Test Case Creation in Katalon Studio
Test Case Creation in Katalon StudioTest Case Creation in Katalon Studio
Test Case Creation in Katalon StudioRapidValue
 

Tendances (20)

TDD and BDD and ATDD
TDD and BDD and ATDDTDD and BDD and ATDD
TDD and BDD and ATDD
 
Looping statements in Java
Looping statements in JavaLooping statements in Java
Looping statements in Java
 
TestNG Framework
TestNG Framework TestNG Framework
TestNG Framework
 
Core Java Tutorial
Core Java TutorialCore Java Tutorial
Core Java Tutorial
 
Data Driven Framework in Selenium
Data Driven Framework in SeleniumData Driven Framework in Selenium
Data Driven Framework in Selenium
 
OOP java
OOP javaOOP java
OOP java
 
4. method overloading
4. method overloading4. method overloading
4. method overloading
 
Java basic tutorial by sanjeevini india
Java basic tutorial by sanjeevini indiaJava basic tutorial by sanjeevini india
Java basic tutorial by sanjeevini india
 
jQuery Fundamentals
jQuery FundamentalsjQuery Fundamentals
jQuery Fundamentals
 
Selenium-Locators
Selenium-LocatorsSelenium-Locators
Selenium-Locators
 
Constructor in java
Constructor in javaConstructor in java
Constructor in java
 
Test NG Framework Complete Walk Through
Test NG Framework Complete Walk ThroughTest NG Framework Complete Walk Through
Test NG Framework Complete Walk Through
 
Unit Testing in Python
Unit Testing in PythonUnit Testing in Python
Unit Testing in Python
 
Mocking in Java with Mockito
Mocking in Java with MockitoMocking in Java with Mockito
Mocking in Java with Mockito
 
Windows PowerShell
Windows PowerShellWindows PowerShell
Windows PowerShell
 
Test-Driven Development
Test-Driven DevelopmentTest-Driven Development
Test-Driven Development
 
Strings in Java
Strings in Java Strings in Java
Strings in Java
 
Effective testing with pytest
Effective testing with pytestEffective testing with pytest
Effective testing with pytest
 
Test Case Creation in Katalon Studio
Test Case Creation in Katalon StudioTest Case Creation in Katalon Studio
Test Case Creation in Katalon Studio
 
TestNG vs Junit
TestNG vs JunitTestNG vs Junit
TestNG vs Junit
 

Similaire à Functions In Scala: Local, First Class, Partially Applied & Tail Recursive

Functions & Closures in Scala
Functions & Closures in ScalaFunctions & Closures in Scala
Functions & Closures in ScalaKnoldus Inc.
 
Functions & closures
Functions & closuresFunctions & closures
Functions & closuresKnoldus Inc.
 
Intro f# functional_programming
Intro f# functional_programmingIntro f# functional_programming
Intro f# functional_programmingMauro Ghiani
 
INTRODUCTION TO PYTHON PROGRMMING AND FUNCTIONS
INTRODUCTION TO PYTHON PROGRMMING AND FUNCTIONSINTRODUCTION TO PYTHON PROGRMMING AND FUNCTIONS
INTRODUCTION TO PYTHON PROGRMMING AND FUNCTIONSKalaivaniD12
 
Functional Objects in Ruby: new horizons – Valentine Ostakh
Functional Objects in Ruby: new horizons  – Valentine OstakhFunctional Objects in Ruby: new horizons  – Valentine Ostakh
Functional Objects in Ruby: new horizons – Valentine OstakhRuby Meditation
 
All About ... Functions
All About ... FunctionsAll About ... Functions
All About ... FunctionsMichal Bigos
 
Principles of functional progrmming in scala
Principles of functional progrmming in scalaPrinciples of functional progrmming in scala
Principles of functional progrmming in scalaehsoon
 
04. WORKING WITH FUNCTIONS-2 (1).pptx
04. WORKING WITH FUNCTIONS-2 (1).pptx04. WORKING WITH FUNCTIONS-2 (1).pptx
04. WORKING WITH FUNCTIONS-2 (1).pptxManas40552
 
Python functions part12
Python functions  part12Python functions  part12
Python functions part12Vishal Dutt
 
Functional programming in clojure
Functional programming in clojureFunctional programming in clojure
Functional programming in clojureJuan-Manuel Gimeno
 
functioninpython-1.pptx
functioninpython-1.pptxfunctioninpython-1.pptx
functioninpython-1.pptxSulekhJangra
 
Python Learn Function with example programs
Python Learn Function with example programsPython Learn Function with example programs
Python Learn Function with example programsGeethaPanneer
 

Similaire à Functions In Scala: Local, First Class, Partially Applied & Tail Recursive (20)

Functions & Closures in Scala
Functions & Closures in ScalaFunctions & Closures in Scala
Functions & Closures in Scala
 
Functions & Closures in Scala
Functions & Closures in ScalaFunctions & Closures in Scala
Functions & Closures in Scala
 
Functions & closures
Functions & closuresFunctions & closures
Functions & closures
 
Python Session - 4
Python Session - 4Python Session - 4
Python Session - 4
 
Intro f# functional_programming
Intro f# functional_programmingIntro f# functional_programming
Intro f# functional_programming
 
Lecture 11 - Functions
Lecture 11 - FunctionsLecture 11 - Functions
Lecture 11 - Functions
 
INTRODUCTION TO PYTHON PROGRMMING AND FUNCTIONS
INTRODUCTION TO PYTHON PROGRMMING AND FUNCTIONSINTRODUCTION TO PYTHON PROGRMMING AND FUNCTIONS
INTRODUCTION TO PYTHON PROGRMMING AND FUNCTIONS
 
Functional Objects in Ruby: new horizons – Valentine Ostakh
Functional Objects in Ruby: new horizons  – Valentine OstakhFunctional Objects in Ruby: new horizons  – Valentine Ostakh
Functional Objects in Ruby: new horizons – Valentine Ostakh
 
All About ... Functions
All About ... FunctionsAll About ... Functions
All About ... Functions
 
Principles of functional progrmming in scala
Principles of functional progrmming in scalaPrinciples of functional progrmming in scala
Principles of functional progrmming in scala
 
04. WORKING WITH FUNCTIONS-2 (1).pptx
04. WORKING WITH FUNCTIONS-2 (1).pptx04. WORKING WITH FUNCTIONS-2 (1).pptx
04. WORKING WITH FUNCTIONS-2 (1).pptx
 
Python functions part12
Python functions  part12Python functions  part12
Python functions part12
 
10. funtions and closures IN SWIFT PROGRAMMING
10. funtions and closures IN SWIFT PROGRAMMING10. funtions and closures IN SWIFT PROGRAMMING
10. funtions and closures IN SWIFT PROGRAMMING
 
Functional programming in clojure
Functional programming in clojureFunctional programming in clojure
Functional programming in clojure
 
Functional programming java
Functional programming javaFunctional programming java
Functional programming java
 
functionnotes.pdf
functionnotes.pdffunctionnotes.pdf
functionnotes.pdf
 
functioninpython-1.pptx
functioninpython-1.pptxfunctioninpython-1.pptx
functioninpython-1.pptx
 
Functional programming 101
Functional programming 101Functional programming 101
Functional programming 101
 
functions- best.pdf
functions- best.pdffunctions- best.pdf
functions- best.pdf
 
Python Learn Function with example programs
Python Learn Function with example programsPython Learn Function with example programs
Python Learn Function with example programs
 

Plus de Knoldus Inc.

Mastering Web Scraping with JSoup Unlocking the Secrets of HTML Parsing
Mastering Web Scraping with JSoup Unlocking the Secrets of HTML ParsingMastering Web Scraping with JSoup Unlocking the Secrets of HTML Parsing
Mastering Web Scraping with JSoup Unlocking the Secrets of HTML ParsingKnoldus Inc.
 
Akka gRPC Essentials A Hands-On Introduction
Akka gRPC Essentials A Hands-On IntroductionAkka gRPC Essentials A Hands-On Introduction
Akka gRPC Essentials A Hands-On IntroductionKnoldus Inc.
 
Entity Core with Core Microservices.pptx
Entity Core with Core Microservices.pptxEntity Core with Core Microservices.pptx
Entity Core with Core Microservices.pptxKnoldus Inc.
 
Introduction to Redis and its features.pptx
Introduction to Redis and its features.pptxIntroduction to Redis and its features.pptx
Introduction to Redis and its features.pptxKnoldus Inc.
 
GraphQL with .NET Core Microservices.pdf
GraphQL with .NET Core Microservices.pdfGraphQL with .NET Core Microservices.pdf
GraphQL with .NET Core Microservices.pdfKnoldus Inc.
 
NuGet Packages Presentation (DoT NeT).pptx
NuGet Packages Presentation (DoT NeT).pptxNuGet Packages Presentation (DoT NeT).pptx
NuGet Packages Presentation (DoT NeT).pptxKnoldus Inc.
 
Data Quality in Test Automation Navigating the Path to Reliable Testing
Data Quality in Test Automation Navigating the Path to Reliable TestingData Quality in Test Automation Navigating the Path to Reliable Testing
Data Quality in Test Automation Navigating the Path to Reliable TestingKnoldus Inc.
 
K8sGPTThe AI​ way to diagnose Kubernetes
K8sGPTThe AI​ way to diagnose KubernetesK8sGPTThe AI​ way to diagnose Kubernetes
K8sGPTThe AI​ way to diagnose KubernetesKnoldus Inc.
 
Introduction to Circle Ci Presentation.pptx
Introduction to Circle Ci Presentation.pptxIntroduction to Circle Ci Presentation.pptx
Introduction to Circle Ci Presentation.pptxKnoldus Inc.
 
Robusta -Tool Presentation (DevOps).pptx
Robusta -Tool Presentation (DevOps).pptxRobusta -Tool Presentation (DevOps).pptx
Robusta -Tool Presentation (DevOps).pptxKnoldus Inc.
 
Optimizing Kubernetes using GOLDILOCKS.pptx
Optimizing Kubernetes using GOLDILOCKS.pptxOptimizing Kubernetes using GOLDILOCKS.pptx
Optimizing Kubernetes using GOLDILOCKS.pptxKnoldus Inc.
 
Azure Function App Exception Handling.pptx
Azure Function App Exception Handling.pptxAzure Function App Exception Handling.pptx
Azure Function App Exception Handling.pptxKnoldus Inc.
 
CQRS Design Pattern Presentation (Java).pptx
CQRS Design Pattern Presentation (Java).pptxCQRS Design Pattern Presentation (Java).pptx
CQRS Design Pattern Presentation (Java).pptxKnoldus Inc.
 
ETL Observability: Azure to Snowflake Presentation
ETL Observability: Azure to Snowflake PresentationETL Observability: Azure to Snowflake Presentation
ETL Observability: Azure to Snowflake PresentationKnoldus Inc.
 
Scripting with K6 - Beyond the Basics Presentation
Scripting with K6 - Beyond the Basics PresentationScripting with K6 - Beyond the Basics Presentation
Scripting with K6 - Beyond the Basics PresentationKnoldus Inc.
 
Getting started with dotnet core Web APIs
Getting started with dotnet core Web APIsGetting started with dotnet core Web APIs
Getting started with dotnet core Web APIsKnoldus Inc.
 
Introduction To Rust part II Presentation
Introduction To Rust part II PresentationIntroduction To Rust part II Presentation
Introduction To Rust part II PresentationKnoldus Inc.
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Configuring Workflows & Validators in JIRA
Configuring Workflows & Validators in JIRAConfiguring Workflows & Validators in JIRA
Configuring Workflows & Validators in JIRAKnoldus Inc.
 
Advanced Python (with dependency injection and hydra configuration packages)
Advanced Python (with dependency injection and hydra configuration packages)Advanced Python (with dependency injection and hydra configuration packages)
Advanced Python (with dependency injection and hydra configuration packages)Knoldus Inc.
 

Plus de Knoldus Inc. (20)

Mastering Web Scraping with JSoup Unlocking the Secrets of HTML Parsing
Mastering Web Scraping with JSoup Unlocking the Secrets of HTML ParsingMastering Web Scraping with JSoup Unlocking the Secrets of HTML Parsing
Mastering Web Scraping with JSoup Unlocking the Secrets of HTML Parsing
 
Akka gRPC Essentials A Hands-On Introduction
Akka gRPC Essentials A Hands-On IntroductionAkka gRPC Essentials A Hands-On Introduction
Akka gRPC Essentials A Hands-On Introduction
 
Entity Core with Core Microservices.pptx
Entity Core with Core Microservices.pptxEntity Core with Core Microservices.pptx
Entity Core with Core Microservices.pptx
 
Introduction to Redis and its features.pptx
Introduction to Redis and its features.pptxIntroduction to Redis and its features.pptx
Introduction to Redis and its features.pptx
 
GraphQL with .NET Core Microservices.pdf
GraphQL with .NET Core Microservices.pdfGraphQL with .NET Core Microservices.pdf
GraphQL with .NET Core Microservices.pdf
 
NuGet Packages Presentation (DoT NeT).pptx
NuGet Packages Presentation (DoT NeT).pptxNuGet Packages Presentation (DoT NeT).pptx
NuGet Packages Presentation (DoT NeT).pptx
 
Data Quality in Test Automation Navigating the Path to Reliable Testing
Data Quality in Test Automation Navigating the Path to Reliable TestingData Quality in Test Automation Navigating the Path to Reliable Testing
Data Quality in Test Automation Navigating the Path to Reliable Testing
 
K8sGPTThe AI​ way to diagnose Kubernetes
K8sGPTThe AI​ way to diagnose KubernetesK8sGPTThe AI​ way to diagnose Kubernetes
K8sGPTThe AI​ way to diagnose Kubernetes
 
Introduction to Circle Ci Presentation.pptx
Introduction to Circle Ci Presentation.pptxIntroduction to Circle Ci Presentation.pptx
Introduction to Circle Ci Presentation.pptx
 
Robusta -Tool Presentation (DevOps).pptx
Robusta -Tool Presentation (DevOps).pptxRobusta -Tool Presentation (DevOps).pptx
Robusta -Tool Presentation (DevOps).pptx
 
Optimizing Kubernetes using GOLDILOCKS.pptx
Optimizing Kubernetes using GOLDILOCKS.pptxOptimizing Kubernetes using GOLDILOCKS.pptx
Optimizing Kubernetes using GOLDILOCKS.pptx
 
Azure Function App Exception Handling.pptx
Azure Function App Exception Handling.pptxAzure Function App Exception Handling.pptx
Azure Function App Exception Handling.pptx
 
CQRS Design Pattern Presentation (Java).pptx
CQRS Design Pattern Presentation (Java).pptxCQRS Design Pattern Presentation (Java).pptx
CQRS Design Pattern Presentation (Java).pptx
 
ETL Observability: Azure to Snowflake Presentation
ETL Observability: Azure to Snowflake PresentationETL Observability: Azure to Snowflake Presentation
ETL Observability: Azure to Snowflake Presentation
 
Scripting with K6 - Beyond the Basics Presentation
Scripting with K6 - Beyond the Basics PresentationScripting with K6 - Beyond the Basics Presentation
Scripting with K6 - Beyond the Basics Presentation
 
Getting started with dotnet core Web APIs
Getting started with dotnet core Web APIsGetting started with dotnet core Web APIs
Getting started with dotnet core Web APIs
 
Introduction To Rust part II Presentation
Introduction To Rust part II PresentationIntroduction To Rust part II Presentation
Introduction To Rust part II Presentation
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Configuring Workflows & Validators in JIRA
Configuring Workflows & Validators in JIRAConfiguring Workflows & Validators in JIRA
Configuring Workflows & Validators in JIRA
 
Advanced Python (with dependency injection and hydra configuration packages)
Advanced Python (with dependency injection and hydra configuration packages)Advanced Python (with dependency injection and hydra configuration packages)
Advanced Python (with dependency injection and hydra configuration packages)
 

Functions In Scala: Local, First Class, Partially Applied & Tail Recursive

  • 1.    Functions In Scala    Janmejani                                      Software Consultant          Knoldus Software LLP
  • 2. AGENDA ● What is Functions. ● Local Functions. ● First Class Function ● Placeholders ● Partially Applied Functions ● Closures ● Repeated Parameters ● Tail Recursion
  • 3. What is Function ➢ A function is a group of statements that together perform a task. ➢ When program gets larger, you need some way to divide them into smaller more manageable pieces. ➢ How you divide is up to you, but logically each function perform a specific task.
  • 4. Difference Between Functions And Methods Functions Methods ➢ Functions have independent ➢ Methods do not have existence means they can be independent existence defined outside of the class. they are always defined with in class. ➢ Methods are called using ➢ Functions are called instance or object. independently.
  • 5. Functions Declaration And Definition def functionName ([list of parameters]) : [return type] def functionName ([list of parameters]) : [return type] = { function body return [expr] } def addInt( a:Int, b:Int ) = { var sum = 0 sum = a + b sum }
  • 6. Calling Functions Following is the standard way to call a method: object Test { def main(args: Array[String]) { println( "Returned Value : " + addInt(5,7) ) } def addInt( a:Int, b:Int ) : a+b }
  • 7. Local Functions Scala allows you to define functions inside a function are called local functions. def factorial(i: Int): Int = { def fact(i: Int, factor: Int): Int = { if (i <= 1) factor else fact(i - 1, i * factor) } fact(i, 1) } }
  • 8. First Class Functions Scala supports first-class functions,which means you can express functions in function literal syntax, ie. , (x: Int) => x + 1, A function literal is compiled into a class that when instantiated at run- time is a function value. For eg : var increase = (x: Int) => x + 1 increase(10)
  • 9. Functions Applied On Functions foreach: It takes a function as an argument and invokes that function on each of its elements. For eg: val someNumbers = List(-11, -10, -5, 0, 5, 10) SomeNumbers foreach((x: Int) => println(x))
  • 10. Filters: Scala provides a number of ways to leave out redundant information. This method selects those elements of a collection that pass a test the user supplies. For eg: someNumbers.filter(x => x > 0) someNumbers.filter(_> 0) To make a function literal even more concise, you can use underscores as placeholders for one or more parameters, so long as each parameter appears only one time within the function literal.
  • 11. Partially Applied Functions Replace the entire list of parameter. For example, rather than writing println(_), you could write println _. val someNumbers = List(-11, -10, -5, 0, 5, 10) someNumbers.foreach(println _) A partially applied function is an expression in which you don’t supply all of the arguments needed by the function. Instead, you supply some, or none, of the needed arguments.
  • 12. Closures A closure is a function whose return value depends on the value of one or more variables declared outside this function. For eg: val multiplier = (i:Int) => i * 10 ➢ A statement with no free variable is called close term. val multiplier = (i:Int) => i * factor ➢ A statement with free variable is called open term. factor is a free variable i is a bound variable The function value (the object) that’s created at runtime from this function literal is called a closure.
  • 13. REPEATED PARAMETERS Scala allows you to indicate that the last parameter to a function may be Repeated. This allows clients to pass variable length argument lists to the Function. For eg: def Size(is: Int*) = is.length println(Size(2,3,4,5,6,67)) To denote a repeated parameter, place an asterisk after the type of the parameter.
  • 14. Tail Recursion In order for a recursive call to be tail recursive, the call back to the function must be the last action performed in the function. def factorial(number:Int) : Int = { if (number == 1) return 1 number * factorial (number - 1) } println(factorial(5)) This is not a tail recursive Function, because the total returned from the recursive call is being multiplied by number, the recursive call is NOT the last action performed in the function.
  • 15. To take this example and make it tail recursive, we must make sure that last action performed in the function is the recursive call. def factorial(fact: Int, number: Int) : Int = { if(number == 1) return fact factorial(number * fact, number - 1) } print(factorial(1,5))
  • 16. Why Tail Recursion? In the recursion example, notice how the result of each call must be remembered, to do this each recursive call requires an entry on the stack until all recursive calls have been made. This makes the recursive call more expensive in terms of memory. While in the tail recursive example, there are no intermediate values that need to be stored on the stack, the intermediate value is always passed back as a parameter.