나는 Option[T]
Scala에서 수업 의 요점을 이해할 수 없습니다 . 내 말은, 나는 None
over의 어떤 이점도 볼 수 없다는 것을 의미 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
returns None
이면 display
유사한 오류와 함께 호출이 다시 실패합니다.
그렇다면 왜 Scala Option[T]
는 Java에서 사용되는 간단한 접근 방식을 따르는 대신 새로운 값 래퍼 ( )를 도입하여 문제를 복잡하게 만들 까요?
최신 정보:
@Mitch 의 제안에 따라 코드를 편집했습니다 . 나는 여전히의 특별한 이점을 볼 수 없습니다 Option[T]
. 예외적 인 경우 null
또는 None
두 경우 모두 테스트해야합니다 . :(
@Michael의 회신 에서 올바르게 이해했다면 유일한 장점은 이 메서드가 None을 반환 할 수 있다고Option[T]
프로그래머에게 명시 적으로 알려주는 것입니다 . 이것이이 디자인 선택의 유일한 이유입니까?