Kotlin supporta valori di default (default arguments) e parametri nominati (named parameters), il che offre maggiore flessibilità rispetto a Java.
fun greet(name: String = "User", greeting: String = "Hello") { println("$greeting, $name!") }
greet(greeting = "Ciao") // -> Ciao, User!
@JvmOverloads.È possibile mescolare argomenti posizionali e nominati in qualsiasi ordine durante la chiamata di una funzione in Kotlin?
Risposta corretta: No, dopo aver specificato almeno un argomento nominato, tutti i successivi devono essere nominati. La violazione genererà un errore di compilazione.
// Errato greet(greeting = "Ciao", "Ivan") // Errore! // Corretto greet("Ivan", greeting = "Ciao") greet(name = "Ivan", greeting = "Ciao")
Storia
Il team ha integrato un modulo Kotlin in un progetto Java legacy e ha dimenticato di aggiungere l'annotazione
@JvmOverloadsper la funzione con parametri di default. Di conseguenza, il codice Java non vedeva i necessari metodi di overload, generando errori di runtime durante la chiamata.
Storia
Durante un refactoring utilizzando parametri nominati, uno sviluppatore ha accidentalmente scambiato gli argomenti: durante una successiva modifica ai nomi dei parametri, questo è passato inosservato (la tipizzazione non è stata violata, ma il significato della chiamata è cambiato!). Questo ha portato a strani bug nella logica dell'interfaccia utente, scoperti solo dopo.