はじめに
公式の問題集「Kotlin Koans」を解きながらKotlinを学習します。
過去記事はこちら
- Introduction
- Classes
- Conventions
問題
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()()