내 디자인에 결함이있는 것 같습니다 (대부분은 아마도 그렇습니다). 그러나 Option
이 Scala
에 사용되고 있으며 그에 대해 너무 행복하지는 않습니다. 이제 나는이 같은 서로 호출하는 3 가지 방법이 있다고 가정 해 봅시다 : A는() I/O
작전에 의존 한, A()
옵션이있는 스칼라 프로그래밍 실습
이제
def A(): reads a file and returns something
def B(): returns something
def C(): Side effect (writes into DB)
및 C()
전화 B()
차례로 B()
호출을, 나는을 처리했다 예외 및 반환 및 Option
그렇지 않으면 컴파일하지 않습니다 (A()
아무것도 반환하지 않는 경우). B()
은 A()
에서 Option
을 받고 무언가를 반환해야하므로 다른 Option
을 C()
으로 반환해야합니다. 따라서, 내 코드에 match/case Some/case None
이 넘쳐 흐르고 있다고 생각할 수 있습니다 (항상 getOrElse()
을 사용할 자유는 없습니다). C()
이 Option
을 반환하는 다른 방법에 의존하는 경우 C()
의 정의를 살펴볼 수 있습니다.
그래서 나는 무엇인가 놓치고 있습니까? 아니면 디자인에 결함이 있습니까? 어떻게 개선 할 수 있습니까? 당신이 Option
을 버리고 당신이 None
이있는 경우 Some(...)
그러나 같은 유형의 다른 값을 처리 한 후 일부 값을 생성 할 때 입력 Option
에 match
/case
를 사용
'Option'을 사용하든 자바 방식을하든간에, 'null'또는 다른 것을 사용하여 결과가없는 경우 어떻게되는지 지정하는 코드를 작성해야합니다. 그래서 그것을 완전히 벗어날 방법이 없습니다. 참고로'match/case Some/case None'을 사용하지 않아도됩니다.'Option'도'map'과 같은 메소드를 가지므로'for'에서 사용할 수 있습니다. – Jesper