美文网首页
kotlin takeIf、takeUnless 的总结

kotlin takeIf、takeUnless 的总结

作者: 雨来 | 来源:发表于2023-01-12 11:11 被阅读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")
    //    }
    
    
    }
    

    相关文章

      网友评论

          本文标题:kotlin takeIf、takeUnless 的总结

          本文链接:https://www.haomeiwen.com/subject/nqxwcdtx.html