Infix-functie is een functie die je in infix-vorm kunt aanroepen (zonder punt en haakjes), wat de leesbaarheid van de code verhoogt. Dergelijke functies zijn handig, bijvoorbeeld voor het creëren van DSL's (domain-specific languages).
infix.Voorbeeld:
infix fun Int.add(x: Int): Int = this + x val result = 5 add 10 // 15
Mag je een infix-functie gebruiken met meerdere parameters of met standaardparameters?
Antwoord: Nee, dat mag niet. Een infix-functie kan precies één verplichte parameter hebben zonder standaardwaarde en zonder vararg.
Voorbeeld van onjuiste declaratie:
// Fout! infix fun foo(a: Int, b: Int) { }
Verhaal
In een project probeerden ze een infix-functie in te voeren om aanroepen van builder-functies te vervangen door meer leesbare infix-uitdrukkingen. Vanwege onwetendheid over de beperking op het aantal parameters, werd de functie gedeclareerd met twee parameters — studenten konden lange tijd niet begrijpen waarom de compilatie niet doorging.
Verhaal
Een ontwikkelaar gebruikte infix-uitdrukkingen in een grote rekenkundige uitdrukking zonder haakjes, in de veronderstelling dat de prioriteit van bewerkingen hetzelfde was als die van traditionele wiskundige operators. Als gevolg hiervan werden de uitdrukkingen niet zoals verwacht berekend — het moest opnieuw geschreven worden met expliciete haakjes.
Verhaal
Binnen een collectie implementeerden ze paring via infix ("item to value") en pasten ze nesting toe, echter door een misverstand over de syntaxis werkten twee geneste infix-aanroepen niet — alleen de paring op het hoogste niveau werkte, geneste paren werden genegeerd, wat leidde tot verlies van significante gegevens.