Условные обозначения Kotlin , в разделе Использование инфиксных функций , говорит:
Объявляйте функцию как инфикс, только когда она работает с двумя объектами, которые играют сходную роль. Хорошие примеры: and
, to
, zip
. Плохой пример: add
.
Не объявляйте метод инфиксным, если он мутирует объект-получатель.
Мой первый вопрос: каким образом add
плохой пример?
Затем в обсуждении базовых типов объясняется, что побитовые операторы являются «именованными функциями, которые можно вызывать в инфиксной форме», и он приводит этот пример (как часть более крупного выражения):
(1 shl 2)
Мне кажется, что три операции сдвига Котлина (shl
, shr
и ushr
) нарушают соглашения о кодировании. Левый и правый операнды вообще не играют сходных ролей. Левый операнд - это исходная битовая комбинация, а правый операнд - на сколько смещается битовая комбинация.
Я что-то здесь упускаю?