Skip to content
AgileLogics
5 min read

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 = false skips role, which keeps its default.
  • Named arguments can be given in any order.
  • Compare createUser("Linus", "member", false) — what does false mean? 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