ProgramaciónDesarrollador Backend

¿Qué son las funciones infix en Kotlin, cómo declararlas y utilizarlas correctamente, y qué limitaciones existen? Proporcione un ejemplo de creación de una función infix propia y hable sobre las trampas.

Supere entrevistas con el asistente de IA Hintsage

Respuesta.

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).

Cómo declarar una función infix:

  • La función debe ser un método de clase o una función de extensión.
  • Debe tener exactamente un parámetro.
  • Se declara con el modificador infix.
  • No permite el uso de vararg y valor predeterminado para el parámetro.

Ejemplo:

infix fun Int.add(x: Int): Int = this + x val result = 5 add 10 // 15

Ventajas:

  • Mejora la legibilidad, especialmente para cálculos o cadenas de llamadas.
  • Aplicable para construir colecciones, comprobar condiciones (por ejemplo, x to y).

Limitaciones y trampas:

  • Infix solo está disponible para métodos con UN parámetro obligatorio.
  • La prioridad de ejecución de infix es menor que la de los operadores de comparación y de los operadores aritméticos (lo que a veces puede llevar a sorpresas con la prioridad de las operaciones).
  • La función infix no funciona con parámetros predeterminados y vararg.

Pregunta trampa.

¿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) { }

Ejemplos de errores reales debido al desconocimiento de las sutilezas del tema:


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.