Scala Partially Applied, Partially Defined, Anonymous, and Curried Functions
Here we are going to take a look at Scala Partially Applied, Partially Defined, Anonymous, and Curried Functions.Twitter wrote much of its website in Scala. They have written this style guide and reference material that is recommended to study.
Partially Applied Functions
Do not confused Partially Applied Functions with Partially Define Functions (defined below). A Partially Applied function is one where you send it fewer than the required number or arguments.For example, first define a function square() that takes a double and input and returns a double:def square(d: Double) : Double = { return (d*d) }Then take a function that multiplies the two input parameters:def multiply(x : Double, y: Double): Double = { return(x * y)}Then nest them together to multiply the first number times the second, but first square the second:var d = multiply(10,square(4))
Partially Defined Functions
This is a unary function that works only for certain values. (Unary means it accepts only one argument.) This idea maps perfectly to the mathematical concept of a domain. For example, the natural logarithm is not defined for any x < =0. We can express that in Scala. Define a function l and use the case statement to limit the parameters it will accept: import scala.math._ val l: PartialFunction[Double, Double] = { case x if x > 0 => log(x)}Then ask what the natural logarithm of the constant e is:l(E)The answer is 1:Double = 1.0You can test whether a partial function is defined for a particular value by using isDefinedAt()l.isDefinedAt(0)Returns:Boolean = false
Anonymous Function
This just means an inline function.val double = (x: Int) => x * 2double(2)Returns:Int = 4
Function Currying
To curry means to take a function that requires multiple arguments into > 1 functions that take a single argument.So define a function to multiply two numbers:def multiply(x: Int, y: Int) = x * yThen curry it like this:def multiply(x: Int) = (y:Int) => x * yNow call it like this:multiply(2)(3)Returns the answer:Int = 6In order to see how that can be useful, we have to study more about Functional Programming, which we will do in another blog post.