fun foo(name: String, number: Int, toUpperCase: Boolean) =
(if (toUpperCase) name.toUpperCase() else name) + number
fun useFoo() = listOf(
foo("a"),
foo("b", number = 1),
foo("c", toUpperCase = true),
foo(name = "d", number = 2, toUpperCase = true)
)
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.toUpperCase() else name) + number
fun useFoo() = listOf(
foo("a"),
foo("b", number = 1),
foo("c", toUpperCase = true),
foo(name = "d", number = 2, toUpperCase = true)
)
문제에서 보여준 Java의 오버로딩된 foo()
함수는 특정 인자가 넘어오지 않을 경우 정해진 기본값을 넘겨주는 형식입니다.
Kotlin에서는 Default arguments를 사용하면 매개변수의 기본값을 설정할 수 있다는 것을 이전 문제를 풀면서 학습하였습니다.
이번 문제에서는 number 매개변수의 기본값과 toUpperCase 매개변수의 기본값을 지정함으로서 해결할 수 있습니다.
이번에는 이전 문제와 많은 부분이 겹쳐서 따로 새롭게 학습할 내용은 없었습니다. 단지 매개변수의 기본값을 설정하는 것은 오버로딩 횟수를 줄이는 데 큰 도움이 된다는 사실을 체험해볼 수 있었던 문제라고 생각합니다.