美文网首页
Kotlin常用标准函数

Kotlin常用标准函数

作者: 海_3efc | 来源:发表于2021-07-20 11:18 被阅读0次
    1.apply函数

    可看作一个配置函数,传入一个接收者,通过调用一系列函数配置它以便使用,如果给apply提供lambda表达式,则会返回配置好的接收者。apply能让每个配置函数都作用于接收者,这种行为又叫相关作用域。配置函数是针对接收者的隐式调用。

    fun main() {
        var file = File("D://file.txt").apply { 
            setReadable(true)
            setWritable(true)
        }
    }
    
    2.let函数

    let函数能使某个变量作用于lambda表达式里面,让it关键字能够引用它。

    函数 参数 返回值
    let 接收者对象 lambda表达式的最后一行
    apply -- 当前接收者
    fun main() {
        val ret = listOf<Int>(5,2,1).last().let {
            it.shl(2)
        }
        println(ret)
    }
    
    3.run函数

    从作用域行为上看,run函数和apply类似,但在返回结果上又不相同,apply返回接收者,而run返回的是lambda表达式的执行结果,从返回值上看类似let。另外,run函数还可以执行函数的引用。

    fun main() {
        val ret = "Welcom,zhh".run {
            contains("zh")
            length
        }
        println(ret)
    
        //执行函数的引用
        20.run(::getAge)
          .run(::getName)
          .run(::println)
    }
    
    private fun getAge(age:Int) = "年龄:$age"
    
    private fun getName(name:String) = "名字:$name"
    
    4.with函数

    是run函数的变体,他们的行为一致。但调用方式有所不同,使用with时需要将值参作为第一个参数传入。

    fun main() {
        //值参作为第一个参数传入
        val ret = with("Hello,Kotlin"){
            length > 5
        }
        println(ret)
    }
    
    5.also函数

    also和let类似,把接收者当中值参传给lambda表达式,但在返回值上有所不同,also返回的是接收者对象,而let返回的是lambda表达式的执行结果。鉴于此区别,also经常作用于同一个原始对象

    fun main() {
        var list : List<String>
        File("D://file.txt")
                .also {
                    println(it.name)
                }.also {
                    it.setReadable(true)
                }.also {
                    list = it.readLines()
                }
        println(list)
    }
    
    6.takeIf函数

    takeIf函数与其他标准函数有所不同,它需要判断lambda表达式中提供的条件表达式,给出true或false结果,如果判断是true,则返回接收者对象,否则返回null。该函数主要用在先判断某个条件是否满足,再执行的场景中。类似与If

    fun main() {
        val ret = File("D://file.txt").takeIf {
            it.exists() && it.canRead()
        }?.readText()
        println(ret)
    }
    
    7.takeUnless函数

    是takeIf的辅助函数,只有给定的条件判断结果为false,takeUnless才会返回原始接收者对象。

    fun main() {
        //不满足条件时,才执行后续
        val ret = File("D://file.txt").takeUnless {
            it.isHidden
        }?.readText()
    
        println(ret)
    }
    

    欢迎留言大家互相交流学习!


    示例源码地址kotlin_demo

    相关文章

      网友评论

          本文标题:Kotlin常用标准函数

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