Как сделать сравнение, как больше или меньше, чем с "Safe Casts"

В Котлине: получение стоимости с помощью get без ? неприемлимо. Но с ? сравнение не приемлемо. Я искал об этом, но не мог найти решение.

Пример кода

var doc = document.getData();
var v = doc?.get("curr_version");

if(v > BuildConfig.VERSION_CODE){

}

4 ответа

Вы можете использовать явную нулевую проверку:

if (v != null && v > BuildConfig.VERSION_CODE) { ... } 

Если вам нравится стиль программирования с функциями высшего порядка, я рекомендую эту идиому для вашего кода:

document.getData()
        ?.get("curr_version")
        ?.takeIf { it > BuildConfig.VERSION_CODE }
        ?.also {
           ...
        }

Вы можете использовать оператор elvis для возврата значения по умолчанию, если v равно нулю как:

if (v ?: 0 > BuildConfig.VERSION_CODE)

или использовать ?.let { } чтобы быть уверенным, что v не равно нулю, как:

v?.let {
    if (it > BuildConfig.VERSION_CODE) {

    }  
}

Я отвечу)

val doc = document.getData()
doc?.let{
    if(it.get("curr_version") > BuildConfig.VERSION_CODE){
        //TODO
    }
}?:run { 
    //TODO If null
}
Другие вопросы по тегам