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
呼び出しは再び失敗し、同様のエラーが発生します。
もしそうなら、なぜScalaOption[T]
はJavaで使用される単純なアプローチに従うのではなく、新しい値ラッパー()を導入することによって物事を複雑にするのですか?
更新:
@Mitchの提案に従ってコードを編集しました。私はまだの特定の利点を見ることができませんOption[T]
。例外的なnull
場合None
、または両方の場合をテストする必要があります。:(
@Michaelの返信から正しく理解した場合、唯一の利点はOption[T]
、このメソッドがNoneを返す可能性があることをプログラマーに明示的に伝えることです。これがこのデザインの選択の背後にある唯一の理由ですか?