ProgrammatieBackend ontwikkelaar

Wat zijn infix-functies in Kotlin, hoe declareer je ze en gebruik je ze correct, welke beperkingen zijn er? Geef een voorbeeld van het maken van een eigen infix-functie en bespreek valkuilen.

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

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

Hoe een infix-functie te declareren:

  • De functie moet een methode van een klasse/extension-functie zijn.
  • Het moet precies één parameter hebben.
  • Het wordt gedeclareerd met de modifier infix.
  • Het gebruik van vararg en default value voor parameters is niet toegestaan.

Voorbeeld:

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

Voordelen:

  • Verhoogde leesbaarheid, vooral voor berekeningen of ketens van aanroepen.
  • Toepasbaar voor het bouwen van collecties, het controleren van voorwaarden (bijvoorbeeld, x to y).

Beperkingen en valkuilen:

  • Infix is alleen beschikbaar voor methoden met EEN verplichte parameter.
  • De prioriteit van infix-uitvoering is lager dan die van vergelijkings- en rekenkundige operators (wat soms leidt tot verrassingen met de prioriteit van bewerkingen).
  • Infix-functie werkt niet met standaardparameters en vararg.

Strikvraag.

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

Voorbeelden van echte fouten door gebrek aan kennis van de nuances van het onderwerp:


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.