Kotlin Koans - Introduction / Default arguments

이준영·2020년 12월 8일
0

Kotlin Koans

목록 보기
4/9
post-thumbnail

문제

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 매개변수의 기본값을 지정함으로서 해결할 수 있습니다.

정리하며

이번에는 이전 문제와 많은 부분이 겹쳐서 따로 새롭게 학습할 내용은 없었습니다. 단지 매개변수의 기본값을 설정하는 것은 오버로딩 횟수를 줄이는 데 큰 도움이 된다는 사실을 체험해볼 수 있었던 문제라고 생각합니다.

참고 자료

Kotlin Reference - Functions and Lambdas / Functions

profile
growing up 🐥

0개의 댓글