Trabajando algunas cosas como operadores
Esta es una adaptación libre basado en el artículo en inglés “Infix functions in Kotlin — Making Tuenti” escrito por Arturo Gutierrez.
Cuando escribes una función regular o una Extension Function, es posible emplearlas con la notación de infijo (o infix notation en inglés).
Vamos a armar un breve ejemplo que nos ayude a entender los infix functions.
Definamos algunos enumeradores y una clase:
enum class ZodiacSign { ARIES, TAURUS, GEMINI, CANCER, LEO, VIRGO, LIBRA, SCORPIO, SAGITTARIUS, CAPRICORN, AQUARIUS, PISCES } enum class Saint { MU, ALDEBARAN, SAGA, KANON, DEATHMASK, AIORIA, SHAKA, DOHKO, MILO, AIOROS, SHURA, CAMUS, AFRODITA } data class GoldenSaint( val saint : Saint, val zodiacSign : ZodiacSign) Los nombres son muy explícitos, pero por si las dudas, se refiere a los signos zodiacales y los nombres de los caballeros dorados de un conocido dibujo japonés llamado “Caballeros del Zodiaco” (o Saint Seiya).
Si precisaramos crear un nuevo objeto la sintaxis habitual sería la siguiente:
val virgoGoldenSaint = GoldenSaint(Saint. SHURA, ZodiacSign. VIRGO ) La idea es simplificar la forma de crear un nuevo objeto agregando una función al enum class Saint.
enum class Saint { MU, ALDEBARAN, SAGA, KANON, DEATHMASK, AIORIA, SHAKA, DOHKO, MILO, AIOROS, SHURA, CAMUS, AFRODITA; fun of(zodiacSign: ZodiacSign) = GoldenSaint( this, zodiacSign) } Con la función of ganamos un poco de legibilidad a la creación de un objeto.
val sagittariusGoldenSaint = Saint. AIOROS.of(ZodiacSign. SAGITTARIUS ) Podríamos mejorarla un poco más mediante la importación estática de cada elemento.
val sagittariusGoldenSaint = AIOROS.of( SAGITTARIUS ) Hasta allí va luciendo mejor, pero aún se podría mejorar. Para ello le agregaremos la palabra reservada infix previo al nombre de nuestra función de esta manera:
enum class Saint { MU, ALDEBARAN, SAGA, KANON, DEATHMASK, AIORIA, SHAKA, DOHKO, MILO, AIOROS, SHURA, CAMUS, AFRODITA; infix fun of(zodiacSign: ZodiacSign) = GoldenSaint( this, zodiacSign) } ¿Y qué conseguimos con ello? Darle a la función una forma similar a la de un operador aritmético tal como lo podemos ver a continuación:
val sagittariusGoldenSaint = AIOROS of SAGITTARIUS ¿Luce mejor verdad? Esto constituye un acercamiento a un lenguaje más natural haciendo nuestro código más legible y conciso.
Consideraciones
Algunas consideraciones para aplicar infix son las siguientes:
- Puede aplicarse a extension functions y funciones de clase.
- La función solo puede recibir un único parámetro.
P.D.
Puede encontrar más artículos sobre Kotlin en la publicación Kotlin Dev Reactor.
Referencias:
- Infix functions in Kotlin — Making Tuenti
- Notación de infijo
- Infix notation — Kotlin Programming Language documentation
¡Gracias por leer el artículo, significa mucho para mi! Si lo disfrutaste o fue de utilidad por favor recomiéndalo y compartelo con tus amigos.

Top comments (0)