Kotlin soporta valores predeterminados (default arguments) y parámetros nombrados (named parameters), lo que ofrece una mayor flexibilidad en comparación con Java.
fun greet(name: String = "User", greeting: String = "Hello") { println("$greeting, $name!") }
greet(greeting = "Hola") // -> Hola, User!
@JvmOverloads.¿Se pueden mezclar argumentos posicionales y nombrados en cualquier orden al llamar a una función en Kotlin?
Respuesta correcta: No, después de que se haya especificado al menos un argumento nombrado, todos los siguientes deben ser nombrados. Violación provocará un error de compilación.
// Incorrecto greet(greeting = "Hola", "Ivan") // ¡Error! // Correcto greet("Ivan", greeting = "Hola") greet(name = "Ivan", greeting = "Hola")
Historia
El equipo integró un módulo de Kotlin con un proyecto Java heredado y olvidó agregar la anotación
@JvmOverloadspara la función con parámetros predeterminados. Como resultado, el código Java no veía los métodos sobrecargados necesarios, lo que causó errores de tiempo de ejecución al llamarlos.
Historia
Al refactorizar utilizando parámetros nombrados, un desarrollador cambió accidentalmente el orden de los argumentos: al cambiar los nombres de los parámetros posteriormente, esto pasó desapercibido (la tipificación no se rompió, pero ¡la semántica de la llamada cambió!). Esto llevó a extraños errores en la lógica de la UI, que no se detectaron de inmediato.
Historia
Uno de los desarrolladores, en un intento de aumentar la legibilidad, mezcló argumentos posicionales y nombrados en medio de la llamada. El código no se compilaba, pero el equipo tuvo dificultades para entender cuál era exactamente el problema, ya que a menudo habían encontrado esto en otros lenguajes y esperaban un comportamiento similar de Kotlin.