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() 식은 s가 null이어도 NPE가 발생하지 않는다.