Les paramètres par défaut en Kotlin permettent de spécifier des valeurs par défaut directement dans la signature de la fonction, rendant le code plus compact et flexible. Cette possibilité améliore la lisibilité et facilite la maintenance, réduisant la nécessité de créer des méthodes surchargées avec un nombre d'arguments différent.
En Java, pour différents types d'appels de fonction, il est souvent nécessaire d'écrire plusieurs méthodes surchargées. En Kotlin, une méthode concise a été développée pour déclarer des valeurs par défaut, ce qui a permis de simplifier l'API.
La surcharge de méthodes pour différents types d'appels est complexe et peu pratique, conduisant à du code excessif et à des erreurs potentielles de maintenance.
Kotlin permet de déclarer des paramètres par défaut directement dans la définition de la fonction. Cela est réalisé à travers des méthodes synthétiques de compagnons au niveau du bytecode JVM (lorsqu'il est appelé depuis Java) ou par simple passage de valeurs (depuis Kotlin). Associé aux paramètres nommés, cela rend l'interface d'appel des fonctions très puissante.
fun greet(name: String = "Guest", greeting: String = "Hello") { println("$greeting, $name!") } greet() // Hello, Guest! greet("Alice") // Hello, Alice! greet(greeting = "Hi") // Hi, Guest! greet("Bob", greeting = "Welcome") // Welcome, Bob!
Peut-on utiliser des paramètres par défaut dans des fonctions au sein des interfaces ?
Oui, mais la valeur par défaut est uniquement mise en œuvre lors de l'appel depuis Kotlin, et lors de l'appel de cette méthode depuis Java, il est nécessaire de spécifier explicitement les arguments.
Peut-on spécifier un paramètre par défaut pour les premiers (gauche) paramètres, et pas seulement pour les derniers ?
Oui, c'est possible en Kotlin, surtout si des arguments nommés sont utilisés lors de l'appel. Cependant, lors de l'utilisation de la fonction depuis Java, des complications peuvent survenir, car Java ne prend pas en charge les arguments nommés et les paramètres par défaut doivent se trouver à droite.
Comment fonctionne l'ordre des arguments lors de l'utilisation mixte de paramètres positionnels et nommés ?
En Kotlin, après le premier argument nommé, tous les suivants doivent être nommés, sinon une erreur de compilation se produira.
greet("Ivan", greeting = "Zdrastvuyte") // OK greet(greeting = "Zdrastvuyte", "Ivan") // Erreur : impossible de passer un positionnel après un argument nommé
Dans une bibliothèque de journalisation, 10 méthodes surchargées ont été mises en œuvre pour différentes combinaisons de journalisation (avec Exception, avec Tag, sans etc.), il est peu pratique de les maintenir.
Avantages :
Inconvénients :
Utilisation d'une fonction avec des arguments par défaut :
fun log(msg: String, tag: String = "", throwable: Throwable? = null) { ... }
Avantages :
Inconvénients :