In Kotlin, the Elvis operator ?: provides a fallback value when the expression on its left is null.
val result = nullableValue ?: defaultValue
If nullableValue is not null, result gets that value.
If nullableValue is null, result gets defaultValue.
Example:
val name: String? = null
val displayName = name ?: "Guest"
println(displayName) // Guest
With a non-null value:
val name: String? = "Alice"
val displayName = name ?: "Guest"
println(displayName) // Alice
It’s often used with safe calls:
val name: String? = null
val nameLength = name?.length ?: 0
println(nameLength) // 0
Here, name?.length returns null if name is null, so ?: 0 supplies the default.
You can also use it with functions:
fun getUsername(): String? {
return null
}
val username = getUsername() ?: "anonymous"
And because throw and return are expressions in Kotlin, they can be used on the right side:
fun printName(name: String?) {
val actualName = name ?: return
println(actualName)
}
fun requireName(name: String?) {
val actualName = name ?: throw IllegalArgumentException("Name is required")
println(actualName)
}
So the basic pattern is:
val value = somethingNullable ?: fallbackValue
