Ich kann den Punkt der Option[T]Klasse in Scala nicht verstehen . Ich meine, ich kann keine Vorteile von Noneüber sehen null.
Betrachten Sie zum Beispiel den Code:
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 */
}
}
}
Angenommen, die Methode getPerson1kehrt zurück null, und der Aufruf in der displayersten Zeile von mainschlägt mit fehl NPE. In ähnlicher Weise getPerson2schlägt Noneder displayAufruf bei einem ähnlichen Fehler erneut fehl, wenn er zurückkehrt .
Wenn ja, warum erschwert Scala die Dinge, indem ein neuer Value Wrapper ( Option[T]) eingeführt wird, anstatt einem einfachen Ansatz zu folgen, der in Java verwendet wird?
AKTUALISIEREN:
Ich habe meinen Code gemäß dem Vorschlag von @Mitch bearbeitet . Ich sehe immer noch keinen besonderen Vorteil von Option[T]. Ich muss auf das Außergewöhnliche nulloder Nonein beiden Fällen testen . :(
Wenn ich die Antwort von @ Michael richtig verstanden habe , besteht der einzige Vorteil Option[T]darin, dass der Programmierer explizit darüber informiert wird, dass diese Methode None zurückgeben kann . Ist dies der einzige Grund für diese Designentscheidung?