#android #if-statement #kotlin #boolean
#Android #if-statement #kotlin #логическое
Вопрос:
Я определил новую функцию (пожалуйста, не ссылайтесь на логику, только если это необходимо):
operator fun Int?.compareTo(other: Int): Int
{
if (this == null)
return -1
if (this > other)
return 1
else return 0
}
теперь в заявлении if я пишу:
val x:Int? =8
if(... amp;amp; .... amp;amp; ...amp;amp; x > 5)
Я вижу, что x> 5 запускает функцию, которую я написал выше (сравните), но эта функция не возвращает логическое значение, она возвращает значение Int . Итак, как она может быть скомпилирована, хотя одно из условий не является логическим?
Комментарии:
1.
if((... amp;amp; .... amp;amp; ...amp;amp; x) > 5)
2. @blackapps, я тебя не понял.
3. Я тоже не мог видеть, что вы сравниваете и сравниваете.
Ответ №1:
В документах kotlin (в конце страницы) вы можете видеть, что a > b
используется compareTo, но на самом деле это переводится на a.compareTo(b) > 0
.
So if(... amp;amp; x > 5)
неявно if(... amp;amp; x.compareTo(5) > 0)
, и именно поэтому вы можете использовать его в операторе if
Комментарии:
1. Спасибо за ответ. Также оператор fun , который я создаю, в конце будет сравниваться с 0?
2. Это верно. Возврат fun operator compareTo будет сравниваться с 0. Таким образом, a> b будет true, если compareTo возвращает положительные значения, a>= b будет true, если compareTo возвращает ноль или положительное значение, и так далее…