안전한 호출을 사용하면 깔끔하게 결과를 얻을 수 있다.
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을 내놓는다.