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 getPerson1
kehrt zurück null
, und der Aufruf in der display
ersten Zeile von main
schlägt mit fehl NPE
. In ähnlicher Weise getPerson2
schlägt None
der display
Aufruf 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 null
oder None
in 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?