Función infix — es una función que se puede invocar en forma infix (sin punto ni paréntesis), lo que mejora la legibilidad del código. Tales funciones son útiles, por ejemplo, para crear DSL (lenguajes específicos de dominio).
infix.Ejemplo:
infix fun Int.add(x: Int): Int = this + x val result = 5 add 10 // 15
¿Se puede usar una función infix con varios parámetros o con parámetros predeterminados?
Respuesta: No, no se puede. La función infix puede tener exactamente un parámetro obligatorio sin valor predeterminado y sin vararg.
Ejemplo de declaración incorrecta:
// ¡Error! infix fun foo(a: Int, b: Int) { }
Historia
En un proyecto intentaron implementar una función infix para reemplazar las llamadas a funciones builder por expresiones infix más legibles. Debido al desconocimiento de la limitación en la cantidad de parámetros, declararon la función con dos parámetros, los estudiantes no podían entender por qué la compilación no pasaba.
Historia
El desarrollador utilizó expresiones infix en una gran expresión aritmética sin paréntesis, suponiendo que la prioridad de las operaciones era la misma que la de los operadores matemáticos tradicionales. Como resultado, las expresiones se calcularon de manera diferente a lo esperado, y tuvo que reescribirlas con paréntesis explícitos.
Historia
Dentro de una colección implementaron paring a través de infix ("item to value") y aplicaron nesting, sin embargo, debido a la falta de comprensión de la sintaxis, dos llamadas infix anidadas no funcionaron; solo funcionó la asignación de pares en el nivel superior, los pares anidados fueron ignorados, lo que resultó en la pérdida de datos significativos.