Я не могу понять точку класса Option[T]
в Scala. Я имею в виду, что я не могу видеть никаких советов None
над null
.
Например, рассмотрим код:
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 */
}
}
}
Теперь предположим, что метод getPerson1
возвращает null
, тогда вызов, сделанный в display
в первой строке main
, будет сбой с NPE
. Аналогично, если getPerson2
возвращает None
, вызов display
снова завершится с некоторой аналогичной ошибкой.
Если да, то почему Scala усложняет ситуацию, введя новую оболочку значения (Option[T]
) вместо того, чтобы следовать простому подходу, используемому в Java?
UPDATE:
Я редактировал свой код в соответствии с предложением @Mitch. Я все еще не вижу особых преимуществ Option[T]
. Я должен проверить исключительные null
или None
в обоих случаях.: (
Если я правильно понял из @Michael reply, единственное преимущество Option[T]
заключается в том, что он явно сообщает программисту, что этот метод может вернуть None? Это единственная причина выбора этого дизайна?