4. Monads
C#와 Kotlin에서 ?. 연산자는 null일 수 있는 값의 프로퍼티를 조회하거나 메서드를 호출하는 방법이다.
수신자가 null이면 전체 표현식이 null이다.
그렇지 않으면 내부의 non-null 값에 호출을 적용한다.
?. 사용은 연결할 수 있으며, 이 경우 첫 null 결과가 조회 연결을 종료한다.
이처럼 null 검사를 연결하는 편이 깊게 중첩된 if를 작성하고 유지하는 것보다 훨씬 편리하다.
마찬가지로 예외는 오류 코드를 직접 검사하고 전파하는 것보다 훨씬 편리하다. 동시에 로깅은 각 함수가 로그 결과와 반환값을 함께 반환하게 하는 것보다 전용 로깅 프레임워크를 사용하는 편이 가장 쉽다. 연결된 null 검사와 예외는 보통 언어 설계자가 이 사용 사례를 예상해야 하지만, 로깅 프레임워크는 대개 부작용을 사용해 로그를 기록하는 코드와 로그 축적을 분리한다.