안전한 호출을 사용하면 깔끔하게 결과를 얻을 수 있다.

    SafeCallsAndElvis/SafeCall.kt

    package safecalls
    import atomictest.eq
    
    fun checkLength(s: String?, expected: Int?) {
      val length1 =
        if (s != null) s.length else null // [1]
      val length2 = s?.length             // [2]
      length1 eq expected
      length2 eq expected
    }
    
    fun main() {
      checkLength("abc", 3)
      checkLength(null, null)
    }

    [2][1]은 같은 효과를 낸다. 수신 객체가 null이 아니면 일반적인 접근(s.length)을 수행한다. 수신 객체가 null이면 두 코드 모두 s.length 호출을 수행(만약 이 연산을 수행하면 예외가 발생할 것이다)하지 않고 식의 결과로 null을 내놓는다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.