KEMBAR78
Partial Functions in Scala | PDF
Par$al	
  Func$ons	
  
in	
  Scala	
  
Total	
  vs.	
  Par$al	
  
•  Total	
  func$on:	
  defined	
  for	
  all	
  values	
  in	
  its	
  
domain	
  
a x b
	
  
•  Par(al	
  func$on:	
  defined	
  for	
  some	
  values	
  in	
  its	
  
domain	
  
a ÷ b
Total	
  func$ons	
  in	
  Scala	
  
def mult(a: Int, b: Int) = a * b
scala> mult(5,42)
res0: Int = 220
Par$al	
  Func$ons	
  
def div(a: Int, b: Int) = a / b
scala> div(1,0)
java.lang.ArithmeticException: / by zero
Par$al	
  Func$ons	
  
val safeDiv: PartialFunction[(Int,Int),Int] = {
case (a,b) if b != 0 => a/b
}
scala> safeDiv(1,0)
scala.MatchError: (1,0)
scala> safeDiv.isDefinedAt (1,0)
false
Combining	
  Par$al	
  Func$ons	
  
safeDiv orElse defaultDiv
Par$al	
  Func$ons	
  in	
  disguise	
  
val map = Map(1 -> "One", 2 -> "Two")

map(1) //One
map(10) // NoSuchElementException: key
not found: 10

map.isDefinedAt(1) // true
map.isDefinedAt(10) //false
Par$al	
  Func$ons	
  in	
  disguise	
  
• List	
  
• Seq	
  
• Range	
  
Partial Functions in Scala

Partial Functions in Scala

  • 1.
  • 2.
    Total  vs.  Par$al   •  Total  func$on:  defined  for  all  values  in  its   domain   a x b   •  Par(al  func$on:  defined  for  some  values  in  its   domain   a ÷ b
  • 3.
    Total  func$ons  in  Scala   def mult(a: Int, b: Int) = a * b scala> mult(5,42) res0: Int = 220
  • 4.
    Par$al  Func$ons   defdiv(a: Int, b: Int) = a / b scala> div(1,0) java.lang.ArithmeticException: / by zero
  • 5.
    Par$al  Func$ons   valsafeDiv: PartialFunction[(Int,Int),Int] = { case (a,b) if b != 0 => a/b } scala> safeDiv(1,0) scala.MatchError: (1,0) scala> safeDiv.isDefinedAt (1,0) false
  • 6.
    Combining  Par$al  Func$ons   safeDiv orElse defaultDiv
  • 7.
    Par$al  Func$ons  in  disguise   val map = Map(1 -> "One", 2 -> "Two") map(1) //One map(10) // NoSuchElementException: key not found: 10 map.isDefinedAt(1) // true map.isDefinedAt(10) //false
  • 8.
    Par$al  Func$ons  in  disguise   • List   • Seq   • Range