Elvis Operator

Default Values with ?:

Example

a ?: b returns a if it is not null, otherwise b. It is named after Elvis Presley's hairstyle ?:.

fun main() {
    val displayName: String? = null
    val name = displayName ?: "Guest"
    println("Welcome, $name")

    val savedTip: Int? = null
    val tip = savedTip ?: 0
    println("Tip: ₹$tip")

    val nickname: String? = "Chintu"
    println(nickname?.length ?: 0)
}

Output

Welcome, Guest
Tip: ₹0
6

Elvis with return and throw

Example

The right side can also be return or throw, which is a neat way to exit early.

fun greet(name: String?) {
    val n = name ?: return          // stop if null
    println("Hello, $n")
}

fun parseAge(text: String): Int {
    return text.toIntOrNull() ?: throw IllegalArgumentException("Invalid age: $text")
}

fun main() {
    greet("Meena")
    greet(null)                     // prints nothing
    println(parseAge("25"))
    println(parseAge("abc"))
}

Output

Hello, Meena
25
Exception: java.lang.IllegalArgumentException: Invalid age: abc