Kotlin中的let、run、also、apply和with都是Lambda表达式的函数式扩展,可以方便地操作对象。它们的区别和用法如下:

  1. let函数:let函数是Kotlin中最常用的函数之一,在函数中可以使用it引用调用该函数的对象。它的作用是在代码块中使用it来执行一些非空性检查,并且避免了空指针异常。它的返回值是表达式的值,也就是执行lambda表达式后的结果。例如:
val name: String? = "Tom"
name?.let {
    println(it.length)
}
  1. run函数:run函数是一个严格的作用域函数,可以访问调用函数对象的属性、方法。在函数内,this指向调用函数的对象,它的返回值是lambda表达式中的最后一个语句或者指定的返回值。例如:
val name: String? = "Tom"
val length = name?.run {
    println(this.length)
    this.length
}
  1. also函数:also函数和let函数类似,在函数内可以通过it引用调用该函数的对象,并且避免了空指针异常。不同的是,它的返回值是调用该函数的对象本身,而不是lambda表达式的结果。例如:
val name: String? = "Tom"
name?.also {
    println(it.length)
}
  1. apply函数:apply函数是创建一个对象并初始化属性的最好方式之一,它的返回值是该对象本身。它内部使用this表示对象本身,在函数中可以调用对象的方法和属性进行初始化。例如:
val user = User().apply {
    name = "Tom"
    age = 18
}
  1. with函数:with函数是一种简化调用函数的方式,它接收一个对象和一个lambda表达式作为参数,使得在lambda表达式中可以直接操作该对象的属性和方法,而无需使用this关键字,也无需返回值。例如:
val user = User()
with(user) {
    name = "Tom"
    age = 18
}

总体来讲,let和also都是用于针对对象执行某些操作,但返回值不同;run和with都是执行某些操作后返回结果,但调用方式和作用域不同;apply则更多用于创建对象并初始化属性。具体使用哪个函数取决于场景和个人喜好。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐