Ответ, который вы ищете, - это значение с правой стороны, и это именно то, что мы ожидаем.Тот факт, что оба они равны нулю, не имеет никакого отношения к порядку, в котором они оцениваются, у Котлина есть контракт, и он его придерживается.
Если я наберу ваш код в моем редакторе, я получу предупреждение, что "Правый операнд оператора elvis (? :) бесполезен, если он нулевой ", что мне кажется правильным.Чтобы обойти это, давайте заменим левые и правые части на функции, которые вместо этого возвращают нуль ...
fun alwaysReturnsNull(log: String): String? {
println(log)
return null
}
val str: String? = alwaysReturnsNull("first") ?: alwaysReturnsNull("second")
println(str)
В этом случае вывод «первый», затем «второй», показываячто Котлин оценивает значения этих функций в порядке, который вы ожидаете: левая рука элвиса, а затем правая рука элвиса.