美文网首页
Kotlin编程实践7章 作用域函数let/run/apply/

Kotlin编程实践7章 作用域函数let/run/apply/

作者: flynnny | 来源:发表于2021-12-29 02:41 被阅读0次

    let、run、apply、also

    1、使用apply函数在构造结束后初始化对象

    apply的接收者与返回值是同一个对象,该函数使用它的接收者调用给定代码块,并在执行完后将其返回。
    最常用于对已经实例化的对象进行额外的配置。

    2、使用also函数进行其他操作

    also 接收者在执行block参数后返回,最常用于将函数调用链接到对象上。

    val block = createBook()
        .also{println(it)}
        .also{Logger.getAnonymousLogger().info(it.toString())}
    

    在block内部使用it引用该对象。
    also返回了上下文。

    3、使用let函数与Elvis

    let返回block的结果而不是上下文对象!因此更像是一个上下文对象转换器。
    如:将字符串内容转大写并特殊处理

    fun processString(str:String) = 
        str.let{
            when{
                it.isEmpty() ->"Empty"
                it.isBlank() ->"Blank"
                else -> it.capitalize()
            }
        }
    

    当参数是可空时候:

    fun processString(str:String?) = 
        str?.let{
            when{
                it.isEmpty() ->"Empty"
                it.isBlank() ->"Blank"
                else -> it.capitalize()
            }
        }?:"Null"
    

    组合使用安全调用操作符?.、let函数、以及?:可以轻松处理所用情况,这时kotlin惯用语法,因为他可以让你轻松处理空余非空两种情况。

    4、使用let函数代替临时变量

    如一个可变字符串列表,然后将它映射到他们的长度并过滤结果

    val numbers = mutableListOf("one","two","three","four","five")
    val resList = numbers.map{it.length}.filter{it>3}
    println(resList)
    

    使用let重构后

    val numbers = mutableListOf("one","two","three","four","five")
    numbers.map{it.length}.filter{it>3}.let{
        println(resList)
        //更多操作。
    }
    

    上面不是将结果赋值给临时变量,因此可以在块中打印或更多操作。

    如果只是打印,则可简化为:

    val numbers = mutableListOf("one","two","three","four","five")
    numbers.map{it.length}.filter{it>3}.let(::println)
    

    相关文章

      网友评论

          本文标题:Kotlin编程实践7章 作用域函数let/run/apply/

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