Introduction
Default arguments
問題
Javaでfoo()のオーバーロードがいくつかあると仮定します:
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);
}
これらのすべてのJavaのオーバーロードをKotlinの1つの関数に置き換えることができます。
foo関数の宣言を変更し、fooを使用するコードがコンパイルされるようにしてください。
デフォルト引数と名前付き引数を使用します。
fun foo(name: String, number: Int, toUpperCase: Boolean) =
(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)
)
解答
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)
)
おわりに
問題の意図を汲み取るのが苦手です・・・。
テストコードが見れたらいいんだけど、なぜか見れないのでとりあえず pass するか動かしてみて、差分を調整してみる感じになってる。
Int = 42 の 42 はどこから来たんだろう??とか考えちゃったけど、仮定の部分に書いてあって、問題文にあるものからテストケースを作っていると推察。
私の思考回路はどこかで競プロみたいなイメージがあって、複数のテストケースがあるかも?と思ってしまった。だけど問題文にはそこまで書かれてないし、素直に受け取ってよかったみたい。メンタルモデルってときに邪魔するんだよな・・・。