2016/12/10の30分 Kotlinメモ🌂

2016/12/10の30分 Kotlinメモ🌂

書いてるコードは雑にここにあります。

github.com

Delegated Properties

kotlinlang.org

あー、あーなるほど。ようわからん。

良さそうなんだけど、使い方に慣れなくて全くようわからん状態のコードを書いてた。

open class User(open val name: String) {

    var age = 0

    var gender: Int = 0
        set(value) {
            field = value
        }

    val isAdmin: Boolean
        get() = false

    val language by Language()
}

class Language {

    val code = 1

    operator fun getValue(thisRef: Any?, property: KProperty<*>): Language {
        return Language()
    }
}

val u3 = User("test")
println(u3.language.code)

なるほど、すべてりかいした(嘘

DroidKaigiの締め切り日が迫ってるってコードをなんとかDelegated Propertiesとか使っちゃって書こうとしたけど、無理無理

class DroidKaigi(val now: LocalDateTime) {
    var status: String by Shimekiri(now)
}

class Shimekiri(val now: LocalDateTime) {

    val kaisai = LocalDate.of(2016, 3, 9).atTime(0, 0)
    var status: String = "やばい"

    operator fun setValue(droidKaigi: DroidKaigi, property: KProperty<*>, s: String) {

    }

    operator fun getValue(droidKaigi: DroidKaigi, property: KProperty<*>): String {
        return status
    }
}

とりあえずlazyが良さ気なことは理解した。

kotlinlang.org

modeで色々変えられるっぽい。デフォルトはSynchronizedLazyImplだね。

public fun <T> lazy(initializer: () -> T): Lazy<T> = SynchronizedLazyImpl(initializer)

public fun <T> lazy(mode: LazyThreadSafetyMode, initializer: () -> T): Lazy<T> =
        when (mode) {
            LazyThreadSafetyMode.SYNCHRONIZED -> SynchronizedLazyImpl(initializer)
            LazyThreadSafetyMode.PUBLICATION -> SafePublicationLazyImpl(initializer)
            LazyThreadSafetyMode.NONE -> UnsafeLazyImpl(initializer)
        }

まとめ

今日ついに上着買いました🎉

まだ着ないけど...