더북(TheBook)

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

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을 내놓는다.

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