メモ

@adachi_koichi

guard patterns in Kotlin

    fun main(args: Array<String>) {

        val thingIntOpt:Int? = 0

        if (thingIntOpt == null) return
        val something0 = thingIntOpt?.takeIf { it < 10 } ?: return

        val thingStringOpt:String? = "hoge"
        if (thingStringOpt !is String) return
        val something1 = thingStringOpt?.let { "hello" } ?: return
        val something2 = thingStringOpt ?: return
        val something3 = thingStringOpt?.apply { println(this) } ?: return


        val thingStringOptInline: String = "hogeInline" as? String ?: return
        println(thingStringOptInline)

        val thing: String? = "fuga"
        val notNullThing = thing.guard { return }
        println(notNullThing)

    }

    inline fun <T> T.guard(block: T.() -> Unit): T {
        if (this == null) block(); return this
    }