kotlin takeIf、takeUnless 的总结

2023-01-12  本文已影响0人  雨来

代码:

/**
 * https://blog.csdn.net/totond/article/details/106070606
 * https://blog.csdn.net/feelinghappy/article/details/109676952
 */

fun main(args: Array<String>) {
    val userName = "ABC"

    /**
     * takeIf 因为条件不成立所以返回null 所以   println(it)
     println("长度大于3") 不会被打印
     */
    userName.takeIf {
        println(it+"=====")
        it.length>10
    }?.also {
        println(it)
        println("长度大于3")
    }?: run {
        println("没有命中")
    }



   //  let、also、 传递的是it  with run apply传的是this
    // takeIf如果表达式(predicate)返回的是true 那么 takeIf返回的是this 否则的话返回null
    /**
     * 返回 this 说明为true 也就是不为null  那么?.also{} 里面的方法 会根据  predicate的值来决定是否执行
     * 如果 predicate 为false 那么返回null 而 ?.是非空判断 则不会执行also{}里面的代码
     */


//    userName.takeIf {
//        it.length>10
//    }.also {
//        //看这里的it 是可空类型 所以不受 it.length>10条件的限制 下面的打印会输出
//        println("长度大于3")
//    }


    /**
     *
    public inline fun <T> T.takeIf(predicate: (T) -> Boolean): T? {
        contract {
            callsInPlace(predicate, InvocationKind.EXACTLY_ONCE)
        }
        return if (predicate(this)) this else null
    }

     */

    /**
     * takeUnless 和takeIf刚好是返回的对于表达式 表达式为false才返回this 否则返回null
     */

//    userName.takeUnless {
//        println(it+"=====")
//        it.length>10
//    }?.also {
//        println(it)
//        println("长度大于3")
//    }


}
上一篇下一篇

猜你喜欢

热点阅读