Kotlin prend en charge les valeurs par défaut (default arguments) et les paramètres nommés (named parameters), ce qui offre une plus grande flexibilité par rapport à Java.
fun greet(name: String = "User", greeting: String = "Hello") { println("$greeting, $name!") }
greet(greeting = "Salut") // -> Salut, User!
@JvmOverloads.Peut-on mélanger des arguments positionnels et nommés dans n'importe quel ordre lors de l'appel d'une fonction en Kotlin ?
Réponse correcte : Non, après avoir spécifié au moins un argument nommé, tous les suivants doivent être nommés. Une violation entraînera une erreur de compilation.
// Incorrect greet(greeting = "Salut", "Ivan") // Erreur ! // Correct greet("Ivan", greeting = "Salut") greet(name = "Ivan", greeting = "Salut")
Histoire
L'équipe a intégré un module Kotlin avec un projet Java legacy et a oublié d'ajouter l'annotation
@JvmOverloadspour la fonction avec des paramètres par défaut. En conséquence, le code Java ne voyait pas les méthodes de surcharge nécessaires — des erreurs d'exécution se produisaient lors de l'appel.
Histoire
Lors d'un refactoring utilisant des paramètres nommés, le développeur a accidentellement échangé les arguments — lors d'un changement ultérieur des noms des paramètres, cela est passé inaperçu (le typage n'était pas violé, mais la sémantique de l'appel a changé !). Cela a conduit à des bogues étranges dans la logique UI, découverts plus tard.
Histoire
L'un des développeurs, dans une tentative d'améliorer la lisibilité, a mélangé des arguments positionnels et nommés au milieu de l'appel. Le code ne compilait pas, mais l'équipe a eu du mal à comprendre quel était le problème — car ils avaient souvent rencontré cela dans d'autres langages et s'attendaient à un comportement similaire de la part de Kotlin.