더북(TheBook)

isNullOrEmpty()를 널이 될 수 있는 String? s를 파라미터로 받는 비확장 함수로 다시 작성할 수 있다.

NullableExtensions/NullableParameter.kt

package nullableextensions
import atomictest.eq

fun isNullOrEmpty(s: String?): Boolean =
  s == null || s.isEmpty()

fun main() {
  isNullOrEmpty(null) eq true
  isNullOrEmpty("") eq true
}

s가 널이 될 수 있는 타입이므로 명시적으로 null 여부와 빈 문자열 여부를 검사할 수 있다. s == null || s.isEmpty()쇼트 서킷(short circuit)을 사용한다. 쇼트 서킷 ||에서 첫 번째 식이 true면 전체 식이 true로 결정되므로, 두 번째 식은 아예 계산을 하지 않는다. 따라서 s == null || s.isEmpty() 식은 snull이어도 NPE가 발생하지 않는다.

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