0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kotlin Koans やってみた 2

Last updated at Posted at 2025-01-03

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 はどこから来たんだろう??とか考えちゃったけど、仮定の部分に書いてあって、問題文にあるものからテストケースを作っていると推察。
私の思考回路はどこかで競プロみたいなイメージがあって、複数のテストケースがあるかも?と思ってしまった。だけど問題文にはそこまで書かれてないし、素直に受け取ってよかったみたい。メンタルモデルってときに邪魔するんだよな・・・。


← 前回の記事 | 次回の記事 →

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?