No puedo entender el sentido de la Option[T]
clase en Scala. Quiero decir, no puedo ver ninguna ventaja de None
má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 getPerson1
regresa null
, luego la llamada realizada a display
en la primera línea de main
es inevitable que falle NPE
. De manera similar, si getPerson2
regresa None
, la display
llamada 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 null
o None
en 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?