Kotlin ondersteunt standaardwaarden (default arguments) en benoemde parameters (named parameters), wat veel flexibiliteit biedt in vergelijking met Java.
fun greet(name: String = "User", greeting: String = "Hello") { println("$greeting, $name!") }
greet(greeting = "Hallo") // -> Hallo, User!
@JvmOverloads nodig zijn.Mag je positionele en benoemde argumenten in willekeurige volgorde mengen bij het aanroepen van een functie in Kotlin?
Juiste antwoord: Nee, nadat je ten minste één benoemd argument hebt opgegeven, moeten alle volgende ook benoemd zijn. Overtreding hiervan zal een compilatiefout veroorzaken.
// Onjuist greet(greeting = "Hoi", "Ivan") // Fout! // Juist greet("Ivan", greeting = "Hoi") greet(name = "Ivan", greeting = "Hoi")
Verhaal
Het team heeft een Kotlin-module geïntegreerd met een legacy Java-project en vergat de annotatie
@JvmOverloadstoe te voegen voor de functie met standaardparameters. Als gevolg hiervan zag de Java-code de benodigde overload-methoden niet — er ontstonden runtime-fouten bij het aanroepen.
Verhaal
Bij het refactoren met behulp van benoemde parameters verwisselde de ontwikkelaar per ongeluk de argumenten — bij een latere naamswijziging van de parameters bleef dit onopgemerkt (de typificatie was niet verbroken, maar de semantiek van de aanroep was veranderd!). Dit leidde tot vreemde bugs in de UI-logica, die niet meteen werden ontdekt.
Verhaal
Een van de ontwikkelaars, in een poging de leesbaarheid te verbeteren, mengde positionele en benoemde argumenten halverwege de aanroep. De code compileerde niet, maar het team begreep moeilijk wat precies het probleem was — omdat ze dit vaak in andere talen tegenkwamen en soortgelijk gedrag van Kotlin verwachtten.