引言

在Kotlin编程语言中,内置函数是那些直接由语言或标准库提供的、无需导入额外包即可使用的函数。以下是一些关键的Kotlin内置函数及其用途概述

1.apply 函数

  • 用途:apply主要用于初始化对象或连续设置多个属性,函数体内的操作将影响到调用该函数的对象本身,并最终返回该对象自身。
val person = Person().apply {
  name = "Alice"
  age = 30
}
  • 特点:apply 函数对于构建器模式非常有用,因为它允许在一个地方集中配置对象的所有属性。

2.let 函数

  • 作用:let 是一个扩展函数,它接收一个可空对象作为参数,并在其非空时执行一个 lambda 表达式。如果对象为空,则 let 直接返回 null。
val nullableString: String? = "Hello"
nullableString.let {
  println(it.length) // 如果nullableString不为null,则打印长度
}
  • 特点:let 的返回值是 lambda 表达式的结果,这意味着可以用于链式调用或者在处理可能为 null 的对象后得到一个新的结果。

3.also 函数

  • 功能:also 同样会对对象执行一个 lambda 表达式,并且无论表达式内做什么操作,都会返回原对象。
val url = URL("https://example.com").also { 
  println("Constructed a URL object: $it") 
}
  • 特点:常用于在进行某种操作的同时保持对原对象的引用,方便进一步操作。

4.with 函数

  • 使用场景:with 不是一个扩展函数,它接受一个对象和一个 lambda 表达式作为参数,在 lambda 中可以直接访问这个对象的方法和属性,最后返回 lambda 的结果。
val message = with(StringBuilder()) {
  append("Hello, ")
  append("World!")
  toString()
}
  • 特点:with 可以临时改变上下文,使得在 lambda 内部无需显式引用对象名。

5.run 函数

  • 功能:run 类似于 let 和 with,可以在对象上调用并返回一个值,但 run 最大的特点是可以作为非扩展函数使用,同时也可以作为扩展函数使用。
val result = run {
  // 在这里执行一系列操作
  val a = 10
  val b = 20
  a + b
}
  • 特点:run 返回其内部lambda表达式的最终结果,不论是在实例上还是在没有接收者的情况下都可以灵活使用

6.takeIf 函数

  • 特点:当匿名函数返回true的时候,就返回调用者本身,否则就返回null
info.takeIf { false }
info.takeIf { true }
println("takeIf false=${info.takeIf { false }}")
println("takeIf true=${info.takeIf { true }}")

takeIf false=null
takeIf true=Kotlin Hello World

7.takeUnless 函数

  • 特点:当匿名函数返回false的时候,就返回调用者本身,否则就返回null
info.takeUnless { false }
info.takeUnless { true }
println("takeUnless false=${info.takeUnless { false }}")
println("takeUnless true=${info.takeUnless { true }}")

takeUnless false=Kotlin Hello World
takeUnless true=null

总结

takeIftakeUnless两个函数用法一样,功能正好相反

takeIftakeUnless一般不单独使用,都是配合空合并符一起使用,如下:takeIftakeUnless用法总结:

info.takeIf { false }?:"当前信息是null"