Imagine you have several overloads of 'foo()' in Java:
public String foo(String name, int number, boolean toUpperCase) {
return (toUpperCase ? name.toUpperCase() : name) + number;
}
public String foo(String name, int number) {
return foo(name, number, false);
}
public String foo(String name, boolean toUpperCase) {
return foo(name, 42, toUpperCase);
}
public String foo(String name) {
return foo(name, 42);
}
You can replace all these Java overloads with one function in Kotlin. Change the declaration of the foo function in a way that makes the code using foo compile. Use default and named arguments.
fun foo(name: String, number: Int = 42, toUpperCase: Boolean = false) =
(if (toUpperCase) name.uppercase() else name) + number
fun useFoo() = listOf(
foo("a"),
foo("b", number = 1),
foo("c", toUpperCase = true),
foo(name = "d", number = 2, toUpperCase = true)
)
자바와 달리 코틀린은 함수에 기본형 매개변수를 넣어줄 수 있다.
자바는 매개변수를 각각 다르게 주고싶은경우 오버로딩을 해서 메소드를 재정의 해줘야 하지만,
코틀린은 기본 인자를 지원하기 때문에 메소드 하나만 정의하더라도 기본값을 설정해 준다면 1개의 메소드를 가지고 여러개의 메소드로 이용할 수 있다.