Kotlin 函数篇/范围函数

范围函数

1.1 定义:

         Kotlin 标准库包含⼏个函数,它们的唯⼀⽬的是在对象的上下⽂中执⾏代码块。 当对⼀个对象调⽤这样的函数并提供⼀个 lambda 表达式时,它会形成⼀个临时作⽤域。

在此作⽤域中,可以访问该对象⽽⽆需其名称从而简化代码。 这些函数称为 作⽤域函数 。

1.2 种类:

      共有以下五种:let 、run 、with 、apply 以及 also

      这些函数基本上做了同样的事情:在⼀个对象上执⾏⼀个代码块。不同的是这个对象在块中如何使⽤,以及整个表达式的返回的结果是什么

1.3 区别:

       由于作⽤域函数本质上都⾮常相似,因此了解它们之间的区别很重要。每个作⽤域函数之间有两个主要区别

      1.引⽤上下⽂对象的⽅式

      2.返回值

this -> 作为lambda表达式的接收者
       { it }  作为作为lambda表达式的参数

1.3.1 根据上下文分类
           run 、with 以及 apply   将上下⽂对象作为接收者(this)。
           let 、also             将上下⽂对象作为 lambda 表达式参数 (it)

1.3.2 根据返回值分类
          apply 及 also 返回上下⽂对象
          let 、run 及 with 返回   最后一行的lambda 表达式结果

根据引用上下文以及函数的返回值就可以确定函数使用的场景

如下例子会帮助你理解返回函数:

fun main(args: Array<String>) {
    val user = User("小明", 18)
    //返回age++的结果 上下文是 user作为参数it
    var ageNew = user.let {
        it.name = "小红"
        ++it.age
    }
    println("ageNew=$ageNew")

    //返回的是 user 本身, lambda 表达式范围内的上下文就是user 可以看到我们调用age时无需用指明对象
    var user1 = user.apply {
        age++
    }
    println(user1.toString())


    val numbers = mutableListOf("one", "two", "three")
    val countEndsWithE = numbers.run {
        add("four")
        add("five")
        count { it.endsWith("e") }
    }
    println("There are $countEndsWithE elements that end with e.")

    var result = user.takeIf { it.name == "小红" }?.takeUnless { it.age != 20 }
    println(result.toString())
    swap()
}

//交换两个值
fun swap(){
    var a = 1
    var b = 2
    a = b.apply { b = a }//return b;

    println("a=$a ,b=$b")

}

学习心得:kotlin 对于会Java的同学来说学习曲线很平滑,只需要懂这些高阶函数,还用kotlin多提供的特性,或者特有的表现方式就算基本掌握了。不懂得一定要去看文档,读文档描述的最准确,最容易理解。然后在做一些练习便于以后复习和记忆。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值