Kotlin obsługuje argumenty domyślne (default arguments) i parametry nazwane (named parameters), co daje większą elastyczność w porównaniu do Javy.
fun greet(name: String = "User", greeting: String = "Hello") { println("$greeting, $name!") }
greet(greeting = "Cześć") // -> Cześć, User!
@JvmOverloads.Czy można mieszać argumenty pozycyjne i nazwane w dowolnej kolejności podczas wywoływania funkcji w Kotlinie?
Prawidłowa odpowiedź: Nie, po wskazaniu choćby jednego nazwanego argumentu, wszystkie następne muszą być nazwane. Naruszenie tego spowoduje błąd kompilacji.
// Niepoprawne greet(greeting = "Cześć", "Ivan") // Błąd! // Poprawne greet("Ivan", greeting = "Cześć") greet(name = "Ivan", greeting = "Cześć")
Historia
Zespół zintegrował moduł Kotlin z legacy projektem Java i zapomniał dodać adnotację
@JvmOverloadsdla funkcji z parametrami domyślnymi. W rezultacie kod Java nie widział potrzebnych metod przeciążających — wystąpiły błędy czasów wykonywania przy wywołaniu.
Historia
Podczas refaktoryzacji z użyciem parametrów nazwanych, programista przypadkowo zamienił miejscami argumenty — przy dalszej zmianie nazw parametrów to przeszło niezauważone (typizacja nie została naruszona, ale semantyka wywołania się zmieniła!). Doprowadziło to do dziwnych błędów w logice UI, odkryto to nie od razu.
Historia
Jeden z programistów próbując zwiększyć czytelność, wymieszał argumenty pozycyjne i nazwane w środku wywołania. Kod nie kompilował się, ale zespół miał trudności z zrozumieniem, na czym dokładnie polega problem — ponieważ często spotykali to w innych językach i oczekiwali podobnego zachowania od Kotlina.