lunes, 30 de mayo de 2016

PartialFunction en scala


Imaginemos que queremos definir un pattern matching si bien sabemos como se debe comportar con ciertos valores, no tenemos una comportamiento por default. Veamos un ejemplo:

def toYesOrNo(choice: Int): String = choice match {
    case 1 | 2 | 3 => "yes"
    case 0 => "no"
  }

En este caso si trato de usar la función para un valor que no se encuentra definido en el dominio por ejemplo 5. Esto nos dará un error. Pero si utilizamos PartialFunction, no nos devolverá un error y a la vez podemos ver si esta función funciona con ese valor:

scala> val one: PartialFunction[Int, String] = { case 1 => "one" }
one: PartialFunction[Int,String] = <function1>

scala> one.isDefinedAt(1)
res0: Boolean = true

scala> one.isDefinedAt(2)
res1: Boolean = false

Dejo link:
https://twitter.github.io/scala_school/pattern-matching-and-functional-composition.html