코틀린에서는 경우에 따라 함수 오버로딩을 쓰지 않아도 된다. 더 우아한 해법인 디폴트 파라미터가 있기 때문이다. 파라미터 뒤에 변수 초기화 식을 추가하면 원하는 파라미터에 디폴트 값을 제공할 수 있다.
fun readInt(radix: Int = 10) = readLine()!!.toInt(radix)
이제 이 함수를 인자 없이 호출해도 되고 인자를 지정해 호출해도 된다.
val decimalInt = readInt() val decimalInt2 = readInt(10) val hexInt = readInt(16)
디폴트 파라미터 뒤에 디폴트가 지정되지 않은 파라미터가 있는 경우, 디폴트 파라미터를 지정하지 않고 이 함수를 호출하는 유일한 방법은 이름 붙은 인자를 사용하는 것뿐이다.
fun restrictToRange( from: Int = Int.MIN_VALUE, to: Int = Int.MAX_VALUE, what: Int ): Int = Math.max(from, Math.min(to, what)) fun main() { println(restrictToRange(10, what = 1)) }
하지만 디폴트 값이 있는 파라미터를 함수 인자 목록 뒤쪽에 몰아두는 쪽이 더 좋은 코딩 스타일이다.