エクスカリバーの謎
Kotlinってカテゴリーを作っても良かったんだけど、
Androidアプリを書くためにお勉強してるから、増やさない方向で。
最近、読み始めたんだけど、そろそろ中盤です。
クラス定義の次の13章「初期化」の章末問題は、
手を動かさないとわからなかったので。
class Sword(_name: String) {
var name = _name
get() = "The Legendary $field"
set(value) {
println("setter")
field = value.toLowerCase().reversed().capitalize()
}
init {
println("init")
println(name)
name = _name // <- setter
println(name)
}
}
fun main(args: Array<String>) {
val sword = Sword("Excalibur")
println(sword.name)
}
$ kotlinc hello.kt -include-runtime -d hello.jar
$ kotlin hello.jar
init
The Legendary Excalibur
setter
The Legendary Rubilacxe
The Legendary Rubilacxe
メンバー定義での代入は初期化扱い、
init
ブロックでの代入はセッター経由、
セッター経由ということは、プロパティとして機能している。
Swiftも初期化ではdidSet
呼ばれないよね、
みたいな解釈で良いですかね(Swift脳)。
おしまい。
Leave a Comment