Tuesday, September 20, 2016

Currying : Calling function using Curly Braces....

scala> //Currying helps to call a method by using Curly Braces

scala> //instead of parenthesis. This will make the code

scala> //much more cleaner ; especially when we are passing

scala> //Function Literals #214

scala>

scala> //NOTE : A function with only Single Parameter

scala> //       can be called either using Parenthesis

scala> //       or Curly Braces

scala>

scala> /*****************************************************
     |  *    Example 1 : A function without 'Currying'
     |  *****************************************************/
     | import scala.io.Source
import scala.io.Source

scala> def fileFilter (fileName:String,
     |             filterOp:String => Boolean)
     |                : List[String] = {
     |    var filteredLines = List[String]()
     |    for (line <- Source.fromFile(fileName).getLines) {
     |       //println("line -> " + line)
     |       if (filterOp(line) == true) {
     |          filteredLines = line :: filteredLines
     |       }else {
     |
     |       }
     |    }
     |    filteredLines
     | }
fileFilter: (fileName: String, filterOp: String => Boolean)List[String]

scala>

scala> //Calling the function using Parenthesis

scala> val filteredLines:List[String] =
     |    fileFilter("data.csv", (x:String) =>
     |       if(x.contains("hello")){
     |          true
     |       }else {
     |          false
     |       }) //Parenthesis is used
filteredLines: List[String] = List(Another hello scala, hello scala)

scala> println("filteredLines -> " + filteredLines)
filteredLines -> List(Another hello scala, hello scala)

scala>

scala> //Calling the function using Curly braces do

scala> //not work

scala> val filteredLines:List[String] =
     |    fileFilter{"data.csv", (x:String) =>
<console>:2: error: ';' expected but ',' found.
          fileFilter{"data.csv", (x:String) =>
                               ^

scala>       if(x.contains("hello")){
     |          true
     |       }else {
     |          false
     |       }
<console>:41: error: not found: value x
                    if(x.contains("hello")){
                       ^

scala>    } //Curly Braces is used
<console>:1: error: eof expected but '}' found.
          } //Curly Braces is used
          ^

scala>

scala>

scala>

scala> /*****************************************************
     |  *    Example 2 : A function with 'Currying'
     |  *****************************************************/
     | import scala.io.Source
import scala.io.Source

scala> //A Curried function containing 2 argument list with

scala> //each list containing a single parameter

scala> def fileFilter (fileName:String)
     |                (filterOp:String => Boolean)
     |                : List[String] = {
     |    var filteredLines = List[String]()
     |    for (line <- Source.fromFile(fileName).getLines) {
     |       //println("line -> " + line)
     |       if (filterOp(line) == true) {
     |          filteredLines = line :: filteredLines
     |       }else {
     |
     |       }
     |    }
     |    filteredLines
     | }
fileFilter: (fileName: String)(filterOp: String => Boolean)List[String]

scala>

scala> //Calling the function using Curly Braces

scala> val filteredLines:List[String] =
     |    fileFilter("data.csv"){ x:String =>
     |       if(x.contains("hello")) {
     |          true
     |       }else {
     |          false
     |       }
     |    } //Curly braces is used
filteredLines: List[String] = List(Another hello scala, hello scala)

scala> println("filteredLines -> " + filteredLines)
filteredLines -> List(Another hello scala, hello scala)