Je ne suis pas capable de comprendre le point de Option[T]
en Scala. Je veux dire, je ne vois pas les avantages de None
sur null
.
Par exemple, considérez le 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 */
}
}
}
Supposons maintenant que la méthode getPerson1
renvoie à null
puis l'appel fait à display
sur la première ligne de main
est voué à l'échec avec NPE
. De même, si getPerson2
renvoie à None
le display
échouera à nouveau avec une erreur similaire.
Si c'est le cas, pourquoi Scala complique-t-il les choses en introduisant un nouveau wrapper de valeurs ( Option[T]
) au lieu de suivre une approche simple utilisée en Java ?
UPDATE :
J'ai modifié mon code comme suit @Mitch La suggestion de la Commission. Je n'arrive toujours pas à voir un avantage particulier de Option[T]
. Je dois tester pour l'exceptionnel null
ou None
dans les deux cas. :(
Si j'ai bien compris de Réponse de @Michael est le seul avantage de Option[T]
est qu'elle indique explicitement au programmeur que cette méthode pourrait renvoyer None ? Est-ce la seule raison de ce choix de conception ?