Соглашения о кодлинге Котлина, инфиксные функции и побитовые операции - PullRequest
2 голосов
/ 03 мая 2019

Условные обозначения Kotlin , в разделе Использование инфиксных функций , говорит:

Объявляйте функцию как инфикс, только когда она работает с двумя объектами, которые играют сходную роль. Хорошие примеры: and, to, zip. Плохой пример: add.

Не объявляйте метод инфиксным, если он мутирует объект-получатель.

Мой первый вопрос: каким образом add плохой пример?

Затем в обсуждении базовых типов объясняется, что побитовые операторы являются «именованными функциями, которые можно вызывать в инфиксной форме», и он приводит этот пример (как часть более крупного выражения):

(1 shl 2)

Мне кажется, что три операции сдвига Котлина (shl, shr и ushr) нарушают соглашения о кодировании. Левый и правый операнды вообще не играют сходных ролей. Левый операнд - это исходная битовая комбинация, а правый операнд - на сколько смещается битовая комбинация.

Я что-то здесь упускаю?

1 Ответ

4 голосов
/ 04 мая 2019

add (давайте выберем add интерфейса MutableList) - плохой пример, потому что он нарушает правило:

Не объявляйте метод инфиксным, если он мутирует объект-получатель.

add изменяет исходный список и возвращает Boolean.


В Kotlin нет специальных операторов для побитовых операций. Итак, для удобного их вызова они созданы как инфиксные функции.

С другой стороны, у целочисленного сложения есть специальный оператор +. Вот почему нет необходимости делать plus (из Int) инфиксной функцией, даже если она будет подходящим кандидатом.

...