Default and Named Arguments
Prerequisites: Functions
Kotlin function parameters can have default values, and callers can pass arguments by name. Together they replace the long lists of overloaded functions common in older languages.
Default values
fun greet(name: String, greeting: String = "Hello") = "$greeting, $name!"
fun main() {
println(greet("Ada"))
println(greet("Ada", "Welcome"))
}
Hello, Ada!
Welcome, Ada!
Named arguments
fun createUser(name: String, role: String = "member", active: Boolean = true) =
"$name ($role, active: $active)"
fun main() {
println(createUser("Ada"))
println(createUser("Linus", active = false))
println(createUser(role = "admin", name = "Grace"))
}
Ada (member, active: true)
Linus (member, active: false)
Grace (admin, active: true)
active = falseskipsrole, which keeps its default.- Named arguments can be given in any order.
- Compare
createUser("Linus", "member", false)— what doesfalsemean? Naming it answers that at the call site. Name Boolean and numeric arguments whenever the meaning isn't obvious.
Any number of arguments: vararg
fun average(vararg numbers: Double): Double =
if (numbers.isEmpty()) 0.0 else numbers.sum() / numbers.size
fun main() {
println(average(2.0, 4.0, 9.0))
println(average())
}
5.0
0.0
Inside the function, a vararg parameter is an array.
Parameters are read-only
Function parameters are always vals. To produce a changed value,
return it:
fun addBonus(score: Int) = score + 10
fun main() {
var myScore = 50
myScore = addBonus(myScore)
println(myScore)
}
60
Practice
Write formatPrice(amount: Double, currency: String = "USD") returning a
string like "12.5 USD". Call it once with only an amount and once with
currency = "EUR".
Show solution
fun formatPrice(amount: Double, currency: String = "USD") = "$amount $currency"
fun main() {
println(formatPrice(12.5))
println(formatPrice(12.5, currency = "EUR"))
}
12.5 USD
12.5 EUR