No puedo entender el sentido de la Option[T]clase en Scala. Quiero decir, no puedo ver ninguna ventaja de Nonemás null.
Por ejemplo, considere el código:
object Main{
class Person(name: String, var age: int){
def display = println(name+" "+age)
}
def getPerson1: Person = {
// returns a Person instance or null
}
def getPerson2: Option[Person] = {
// returns either Some[Person] or None
}
def main(argv: Array[String]): Unit = {
val p = getPerson1
if (p!=null) p.display
getPerson2 match{
case Some(person) => person.display
case None => /* Do nothing */
}
}
}
Ahora suponga que el método getPerson1regresa null, luego la llamada realizada a displayen la primera línea de maines inevitable que falle NPE. De manera similar, si getPerson2regresa None, la displayllamada fallará nuevamente con algún error similar.
Si es así, ¿por qué Scala complica las cosas al introducir un nuevo contenedor de valor ( Option[T]) en lugar de seguir un enfoque simple utilizado en Java?
ACTUALIZAR:
He editado mi código según la sugerencia de @Mitch . Todavía no puedo ver ninguna ventaja en particular Option[T]. Tengo que probar lo excepcional nullo Noneen ambos casos. :(
Si he entendido correctamente la respuesta de @ Michael , ¿la única ventaja Option[T]es que le dice explícitamente al programador que este método podría devolver None ? ¿Es esta la única razón detrás de esta elección de diseño?