Infix-функция — это функция, которую можно вызывать в инфиксной форме (без точки и скобок), что повышает читаемость кода. Такие функции удобны, например, для создания DSL (domain-specific languages).
infix.Пример:
infix fun Int.add(x: Int): Int = this + x val result = 5 add 10 // 15
Можно ли использовать infix-функцию с несколькими параметрами или с параметрами по умолчанию?
Ответ: Нет, нельзя. Infix-функция может иметь ровно один обязательный параметр без значения по умолчанию и без vararg.
Пример неверного объявления:
// Ошибка! infix fun foo(a: Int, b: Int) { }
История
В проекте пытались внедрить infix-функцию, чтобы заменить вызовы builder-функций на более читаемые инфиксные выражения. Из-за незнания ограничения на количество параметров функцию объявили с двумя параметрами — студенты долго не могли понять, почему компиляция не проходит.
История
Разработчик использовал infix-выражения в большом арифметическом выражении без скобок, полагая, что приоритет операций такой же, как у традиционных математических операторов. В результате выражения вычислялись не так, как ожидалось — пришлось переписывать с явными скобками.
История
Внутри коллекции реализовали paring через infix ("item to value") и применяли внутри nesting, однако из-за недопонимания синтаксиса два вложенных infix-вызова не сработали — сработало только задание пары на верхнем уровне, вложенные пары были проигнорированы, что привело к потерям значимых данных.