Как функция, возвращающая значение Int, может быть частью оператора if?

#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 возвращает ноль или положительное значение, и так далее…