SlideShare ist ein Scribd-Unternehmen logo
1 von 24
Scala Functions & Closures




Neelkanth Sachdeva

Consultant / Software Engineer

Knoldus Software LLP , New Delhi

neelkanthsachdeva.wordpress.com

neelkanth@knoldus.com
Methods

The most common way to define a function is
as a member of some object.Such a function is
called a Method.
/*
 * Normal Functions
 */

object LongLines extends App{

    def ProcessFile(fileName: String, width: Int)
{
        val source = Source.fromFile(fileName)
        for (line <- source.getLines)
          processLine(fileName, width, line)
    }

    private def processLine(filename: String,
      width: Int, line: String) {
      if (line.length > width)
        println(filename + ": " + line)
    }
}
Local functions

Programs should be decomposed into many small functions that each
do a well-defined task. One problem with this approach is that all the
helper function names can pollute the program name space
In Java →
1.Defining private methods.
In Scala →
1. Defining private methods also works
                 +
2. You can define functions inside other functions
/*
 * Defining Local Functions More Easily
 */
object LongLines extends App {

    def ProcessFile(fileName: String,width: Int) {

        def processLine(line: String) {
          if (line.length > width)
            println(fileName + ": " + line)
        }

        val source = Source.fromFile(fileName)
        for (line <- source.getLines)
          processLine(line)
    }
}
First-class functions

Scala has first-class functions. Not only can you
define functions and call them, but you can write
down functions as unnamed literals and then
pass them around as values.
Function Literals

A function literal is compiled into a class that
when instantiated at runtime is a function value.
Then What is the difference ?
Thus the distinction between function literals and
values is that function literals exist in the source
code, whereas function values exist as objects at
runtime.
Example:

Simple function literal :-

 (x: Int) => x + 1

The => designates that this function converts the thing on the left (any
integer x) to the thing on the right (x + 1). So, this is a function mapping
any integer x to x + 1.
Function values are objects, so

→ you can store them in variables

 scala> var increase = (x: Int) => x + 1
 increase: (Int) => Int = <function>

They are functions too , so

→ you can invoke them using the usual parentheses
  function-call notation.

   scala> increase(10)
   res0: Int = 11
We've seen the nuts and bolts of function literals and function
values. Many Scala libraries give you opportunities to use
them e.g

foreach method:

scala> val someNumbers = List(-11, -10, -5, 0, 5, 10)
someNumbers: List[Int] = List(-11, -10, -5, 0, 5, 10)
scala> someNumbers.foreach((x: Int) => println(x))

filter method:

scala> someNumbers.filter((x: Int) => x > 0)
Short forms of function literals
Scala provides a number of ways to leave out redundant information and
write function literals more briefly. Keep your eyes open for these
opportunities, because they allow you to remove clutter from your code.


One way to make a function literal more brief is to leave off the parameter
types. Thus, the previous example with filter could be written like this:


scala> someNumbers.filter((x) => x > 0)
res7: List[Int] = List(5, 10)
Even leave the parentheses around x
scala> someNumbers.filter( x => x > 0)
res7: List[Int] = List(5, 10)
Placeholder syntax

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.


scala> someNumbers.filter( _ > 0)
res9: List[Int] = List(5, 10)
Partially applied functions

someNumbers.foreach( println _ )
Scala treats this short form exactly as if you had
written the following:
someNumbers.foreach(x => println(x))


When you use an underscore in this way, you are
writing a partially applied function.
Examples:



scala> def sum(a: Int, b: Int, c: Int) = a + b + c
sum: (Int,Int,Int)Int

scala> sum(1, 2, 3)
res0: Int = 6

scala> val a = sum _
a: (Int, Int, Int) => Int = <function>

scala> a.apply(1, 2, 3)
res1: Int = 6
scala> val b = sum(1, _: Int, 3)
b: (Int) => Int = <function>

scala> b(2)
res15: Int = 6

In this case, b.apply invoked sum(1, 2, 3).

scala> val c = sum

<console>:5: error: missing arguments for method sum...
follow this method with `_' if you want to treat it as
a partially applied function
val c = sum
          ˆ
Closures
x → by contrast, is a bound variable, because it
does have a meaning in the context of the
function: it is defined as the function’s lone
parameter, an Int.


more → more is a free variable, because the
Function literal does not itself give a meaning to it.
So the closures is :

The function value (the object) that’s created at
runtime from this function literal is called a
closure.
(x: Int) => x + 1, is called a closed term,
Thus a function value created at runtime from
this function literal is not a closure in the strictest
Sense .


(x: Int) => x + more, is an open term. Therefore,
any function value created at runtime from (x: Int) => x +
more will by definition require that a binding for its free
variable, more, be captured. The resulting function value,
which will contain a reference to the captured more variable,
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.
Thank You

Weitere ähnliche Inhalte

Was ist angesagt?

Functional Objects & Function and Closures
Functional Objects  & Function and ClosuresFunctional Objects  & Function and Closures
Functional Objects & Function and ClosuresSandip Kumar
 
Scala oo (1)
Scala oo (1)Scala oo (1)
Scala oo (1)Sandip Kumar
 
Functional programming java
Functional programming javaFunctional programming java
Functional programming javaManeesh Chaturvedi
 
Advanced Javascript
Advanced JavascriptAdvanced Javascript
Advanced Javascriptrelay12
 
Java Script Language Tutorial
Java Script Language TutorialJava Script Language Tutorial
Java Script Language Tutorialvikram singh
 
Play framework training by Neelkanth Sachdeva @ Scala traits event , New Delh...
Play framework training by Neelkanth Sachdeva @ Scala traits event , New Delh...Play framework training by Neelkanth Sachdeva @ Scala traits event , New Delh...
Play framework training by Neelkanth Sachdeva @ Scala traits event , New Delh...Knoldus Inc.
 
Python functions
Python functionsPython functions
Python functionsAliyamanasa
 
Linq Introduction
Linq IntroductionLinq Introduction
Linq IntroductionNeeraj Kaushik
 
Functions in python slide share
Functions in python slide shareFunctions in python slide share
Functions in python slide shareDevashish Kumar
 
Namespace in C++ Programming Language
Namespace in C++ Programming LanguageNamespace in C++ Programming Language
Namespace in C++ Programming LanguageHimanshu Choudhary
 
Strings Arrays
Strings ArraysStrings Arrays
Strings Arraysphanleson
 
Linq and lambda
Linq and lambdaLinq and lambda
Linq and lambdaJohn Walsh
 
Basics of Functional Programming
Basics of Functional ProgrammingBasics of Functional Programming
Basics of Functional ProgrammingSartaj Singh
 
Programming in Scala - Lecture Four
Programming in Scala - Lecture FourProgramming in Scala - Lecture Four
Programming in Scala - Lecture FourAngelo Corsaro
 
Google06
Google06Google06
Google06Zhiwen Guo
 
First approach in linq
First approach in linqFirst approach in linq
First approach in linqVignesh Nethaji
 

Was ist angesagt? (19)

Functional Objects & Function and Closures
Functional Objects  & Function and ClosuresFunctional Objects  & Function and Closures
Functional Objects & Function and Closures
 
Scala oo (1)
Scala oo (1)Scala oo (1)
Scala oo (1)
 
Functional programming java
Functional programming javaFunctional programming java
Functional programming java
 
Advanced Javascript
Advanced JavascriptAdvanced Javascript
Advanced Javascript
 
Java Script Language Tutorial
Java Script Language TutorialJava Script Language Tutorial
Java Script Language Tutorial
 
Play framework training by Neelkanth Sachdeva @ Scala traits event , New Delh...
Play framework training by Neelkanth Sachdeva @ Scala traits event , New Delh...Play framework training by Neelkanth Sachdeva @ Scala traits event , New Delh...
Play framework training by Neelkanth Sachdeva @ Scala traits event , New Delh...
 
Python functions
Python functionsPython functions
Python functions
 
Arrays
ArraysArrays
Arrays
 
Chapter 16 Dictionaries
Chapter 16 DictionariesChapter 16 Dictionaries
Chapter 16 Dictionaries
 
Linq Introduction
Linq IntroductionLinq Introduction
Linq Introduction
 
Functions in python slide share
Functions in python slide shareFunctions in python slide share
Functions in python slide share
 
Namespace in C++ Programming Language
Namespace in C++ Programming LanguageNamespace in C++ Programming Language
Namespace in C++ Programming Language
 
Strings Arrays
Strings ArraysStrings Arrays
Strings Arrays
 
Linq and lambda
Linq and lambdaLinq and lambda
Linq and lambda
 
Scala
ScalaScala
Scala
 
Basics of Functional Programming
Basics of Functional ProgrammingBasics of Functional Programming
Basics of Functional Programming
 
Programming in Scala - Lecture Four
Programming in Scala - Lecture FourProgramming in Scala - Lecture Four
Programming in Scala - Lecture Four
 
Google06
Google06Google06
Google06
 
First approach in linq
First approach in linqFirst approach in linq
First approach in linq
 

Ă„hnlich wie Functions & Closures in Scala

Scala functions
Scala functionsScala functions
Scala functionsKnoldus Inc.
 
Principles of functional progrmming in scala
Principles of functional progrmming in scalaPrinciples of functional progrmming in scala
Principles of functional progrmming in scalaehsoon
 
Functions In Scala
Functions In Scala Functions In Scala
Functions In Scala Knoldus Inc.
 
Scala Talk at FOSDEM 2009
Scala Talk at FOSDEM 2009Scala Talk at FOSDEM 2009
Scala Talk at FOSDEM 2009Martin Odersky
 
Functions in C++
Functions in C++Functions in C++
Functions in C++home
 
Functions in C++
Functions in C++Functions in C++
Functions in C++home
 
Functional Objects & Function and Closures
Functional Objects  & Function and ClosuresFunctional Objects  & Function and Closures
Functional Objects & Function and ClosuresSandip Kumar
 
Functional Objects & Function and Closures
Functional Objects  & Function and ClosuresFunctional Objects  & Function and Closures
Functional Objects & Function and ClosuresSandip Kumar
 
Functional Programming With Scala
Functional Programming With ScalaFunctional Programming With Scala
Functional Programming With ScalaKnoldus Inc.
 
Ti1220 Lecture 7: Polymorphism
Ti1220 Lecture 7: PolymorphismTi1220 Lecture 7: Polymorphism
Ti1220 Lecture 7: PolymorphismEelco Visser
 
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
 
04_python_functions.ppt You can define functions to provide the required func...
04_python_functions.ppt You can define functions to provide the required func...04_python_functions.ppt You can define functions to provide the required func...
04_python_functions.ppt You can define functions to provide the required func...anaveenkumar4
 
Python and You Series
Python and You SeriesPython and You Series
Python and You SeriesKarthik Prakash
 
Programming in Scala - Lecture Two
Programming in Scala - Lecture TwoProgramming in Scala - Lecture Two
Programming in Scala - Lecture TwoAngelo Corsaro
 
Functional object
Functional objectFunctional object
Functional objectruchijindal87
 

Ă„hnlich wie Functions & Closures in Scala (20)

Scala functions
Scala functionsScala functions
Scala functions
 
Principles of functional progrmming in scala
Principles of functional progrmming in scalaPrinciples of functional progrmming in scala
Principles of functional progrmming in scala
 
Functions In Scala
Functions In Scala Functions In Scala
Functions In Scala
 
Scala Talk at FOSDEM 2009
Scala Talk at FOSDEM 2009Scala Talk at FOSDEM 2009
Scala Talk at FOSDEM 2009
 
Functions in C++
Functions in C++Functions in C++
Functions in C++
 
Functions in C++
Functions in C++Functions in C++
Functions in C++
 
Functional Objects & Function and Closures
Functional Objects  & Function and ClosuresFunctional Objects  & Function and Closures
Functional Objects & Function and Closures
 
Functional Objects & Function and Closures
Functional Objects  & Function and ClosuresFunctional Objects  & Function and Closures
Functional Objects & Function and Closures
 
Functional Programming With Scala
Functional Programming With ScalaFunctional Programming With Scala
Functional Programming With Scala
 
Ti1220 Lecture 7: Polymorphism
Ti1220 Lecture 7: PolymorphismTi1220 Lecture 7: Polymorphism
Ti1220 Lecture 7: Polymorphism
 
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
 
Lecture 3
Lecture 3Lecture 3
Lecture 3
 
04_python_functions.ppt You can define functions to provide the required func...
04_python_functions.ppt You can define functions to provide the required func...04_python_functions.ppt You can define functions to provide the required func...
04_python_functions.ppt You can define functions to provide the required func...
 
Scala google
Scala google Scala google
Scala google
 
Python and You Series
Python and You SeriesPython and You Series
Python and You Series
 
functions.pptx
functions.pptxfunctions.pptx
functions.pptx
 
Python functions
Python functionsPython functions
Python functions
 
Programming in Scala - Lecture Two
Programming in Scala - Lecture TwoProgramming in Scala - Lecture Two
Programming in Scala - Lecture Two
 
Functional object
Functional objectFunctional object
Functional object
 

KĂĽrzlich hochgeladen

Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 

KĂĽrzlich hochgeladen (20)

Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 

Functions & Closures in Scala

  • 1. Scala Functions & Closures Neelkanth Sachdeva Consultant / Software Engineer Knoldus Software LLP , New Delhi neelkanthsachdeva.wordpress.com neelkanth@knoldus.com
  • 2. Methods The most common way to define a function is as a member of some object.Such a function is called a Method.
  • 3. /* * Normal Functions */ object LongLines extends App{ def ProcessFile(fileName: String, width: Int) { val source = Source.fromFile(fileName) for (line <- source.getLines) processLine(fileName, width, line) } private def processLine(filename: String, width: Int, line: String) { if (line.length > width) println(filename + ": " + line) } }
  • 4. Local functions Programs should be decomposed into many small functions that each do a well-defined task. One problem with this approach is that all the helper function names can pollute the program name space In Java → 1.Defining private methods. In Scala → 1. Defining private methods also works + 2. You can define functions inside other functions
  • 5. /* * Defining Local Functions More Easily */ object LongLines extends App { def ProcessFile(fileName: String,width: Int) { def processLine(line: String) { if (line.length > width) println(fileName + ": " + line) } val source = Source.fromFile(fileName) for (line <- source.getLines) processLine(line) } }
  • 6. First-class functions Scala has first-class functions. Not only can you define functions and call them, but you can write down functions as unnamed literals and then pass them around as values.
  • 7.
  • 8. Function Literals A function literal is compiled into a class that when instantiated at runtime is a function value. Then What is the difference ? Thus the distinction between function literals and values is that function literals exist in the source code, whereas function values exist as objects at runtime.
  • 9. Example: Simple function literal :- (x: Int) => x + 1 The => designates that this function converts the thing on the left (any integer x) to the thing on the right (x + 1). So, this is a function mapping any integer x to x + 1.
  • 10. Function values are objects, so → you can store them in variables scala> var increase = (x: Int) => x + 1 increase: (Int) => Int = <function> They are functions too , so → you can invoke them using the usual parentheses function-call notation. scala> increase(10) res0: Int = 11
  • 11. We've seen the nuts and bolts of function literals and function values. Many Scala libraries give you opportunities to use them e.g foreach method: scala> val someNumbers = List(-11, -10, -5, 0, 5, 10) someNumbers: List[Int] = List(-11, -10, -5, 0, 5, 10) scala> someNumbers.foreach((x: Int) => println(x)) filter method: scala> someNumbers.filter((x: Int) => x > 0)
  • 12. Short forms of function literals Scala provides a number of ways to leave out redundant information and write function literals more briefly. Keep your eyes open for these opportunities, because they allow you to remove clutter from your code. One way to make a function literal more brief is to leave off the parameter types. Thus, the previous example with filter could be written like this: scala> someNumbers.filter((x) => x > 0) res7: List[Int] = List(5, 10) Even leave the parentheses around x scala> someNumbers.filter( x => x > 0) res7: List[Int] = List(5, 10)
  • 13. Placeholder syntax 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. scala> someNumbers.filter( _ > 0) res9: List[Int] = List(5, 10)
  • 14. Partially applied functions someNumbers.foreach( println _ ) Scala treats this short form exactly as if you had written the following: someNumbers.foreach(x => println(x)) When you use an underscore in this way, you are writing a partially applied function.
  • 15. Examples: scala> def sum(a: Int, b: Int, c: Int) = a + b + c sum: (Int,Int,Int)Int scala> sum(1, 2, 3) res0: Int = 6 scala> val a = sum _ a: (Int, Int, Int) => Int = <function> scala> a.apply(1, 2, 3) res1: Int = 6
  • 16. scala> val b = sum(1, _: Int, 3) b: (Int) => Int = <function> scala> b(2) res15: Int = 6 In this case, b.apply invoked sum(1, 2, 3). scala> val c = sum <console>:5: error: missing arguments for method sum... follow this method with `_' if you want to treat it as a partially applied function val c = sum ˆ
  • 18. x → by contrast, is a bound variable, because it does have a meaning in the context of the function: it is defined as the function’s lone parameter, an Int. more → more is a free variable, because the Function literal does not itself give a meaning to it.
  • 19.
  • 20. So the closures is : The function value (the object) that’s created at runtime from this function literal is called a closure.
  • 21. (x: Int) => x + 1, is called a closed term, Thus a function value created at runtime from this function literal is not a closure in the strictest Sense . (x: Int) => x + more, is an open term. Therefore, any function value created at runtime from (x: Int) => x + more will by definition require that a binding for its free variable, more, be captured. The resulting function value, which will contain a reference to the captured more variable, is called a closure,
  • 22. 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.
  • 23.