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?

More than 1 year has passed since last update.

Kotlin KoansでKotlin入門 第18回:Invoke

Posted at

はじめに

公式の問題集「Kotlin Koans」を解きながらKotlinを学習します。

過去記事はこちら

問題

Invoke

invoke()メソッドを持つオブジェクトは、関数として呼び出すことができます。
どのクラスでも invoke 拡張を追加することができますが、使いすぎないようにしたほうがよいでしょう。

operator fun Int.invoke() { println(this) }

1() //huh?..

Invokable.invoke()という関数を実装して、呼び出された回数をカウントするようにしましょう。

修正前のコード

class Invokable {
    var numberOfInvocations: Int = 0
        private set

    operator fun invoke(): Invokable {
        TODO()
    }
}

fun invokeTwice(invokable: Invokable) = invokable()()

問題のポイント

operator overloadingのつづきでinvoke operatorを使います。
括弧だけでinvokeメソッドを呼び出すことができます。

解答例

class Invokable {
    var numberOfInvocations: Int = 0
        private set

    operator fun invoke(): Invokable {
        numberOfInvocations += 1
        return this
    }
}

fun invokeTwice(invokable: Invokable) = invokable()()
0
0
0

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?