4.2.5 엘비스 연산자
널이 될 수 있는 값을 다룰 때 유용한 연산자로 널 복합 연산자(null coalescing operator)인 ?:을 들 수 있다. 이 연산자를 사용하면 널을 대신할 디폴트 값을 지정할 수 있다. 엘비스 프레슬리(Elvis Persley)를 닮았기 때문에 널 복합 연산자를 보통은 엘비스 연산자라고 부른다. 다음 예제를 살펴보자.
fun sayHello(name: String?) { println("Hello, " + (name ?: "Unknown")) } fun main() { sayHello("John") // Hello, John sayHello(null) // Hello, Unknown }
이 연산자의 결과는 왼쪽 피연산자가 널이 아닐 경우에는 왼쪽 피연산자의 값이고, 왼쪽 피연산자가 널일 경우에는 오른쪽 피연산자의 값이다. 기본적으로 sayHello() 함수는 다음 코드와 같다.
fun sayHello(name: String?) { println("Hello, " + (if (name != null) name else "Unknown")) }
안전한 연산과 엘비스 연산자를 조합해서 수신 객체가 널일 때의 디폴트 값을 지정하면 유용하다. 다음 코드는 프로그램의 표준 입력이 널을 반환할 경우 0을 n에 대입한다.
val n = readLine()?.toInt() ?: 0