Hi everyone,
I am a beginner to functional programming and I have recently started studying Scala and I really love this language for the all goodies it provides like closures, pattern matching, currying etc.
However I am not able to understand the point of Option[T]
class in Scala. I mean, I am not able to see any advanages of None
over null
.
e.g. Consider the 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 */
}
}
}
Now suppose, the method getPerson1
returns null
, then the call made to display
on first line of main
is bound to fail with NPE
. Similarly if getPerson2
returns None
, the display
call will again fail with some similar error.
If so, then why does Scala complicate things by introducing a new value wrapper (Option[T]
) instead of following a simple approach used in Java?
Any help would be greatly appreciated.
Thanks!
UPDATE :
I have edited my code as per @Mitch's suggestion. I am still not able to see any particular advantage of Option[T]
. I have to test for the exceptional null
or None
in both cases. :(
If I have understood correctly from @Michael's reply, is the only advantage of Option[T]
is that it explicitly tells the programmer that this method could return None? Is this the only reason behind this design choice?
Please shed some more light.
Thanks!