扩展函数

扩展函数

September 12, 2024

1.builtin extension function

  • let: 用于处理可能为 null 的对象,并且仅当对象非 null 时才执行 Lambda。
  • with: 提供一个上下文对象来简化对对象成员的访问。
  • run: 结合了 with 和 let 的功能,可以用于 null 对象,并返回 Lambda 的结果。
  • apply: 用于对象的初始化,返回对象本身。
  • also: 执行副作用操作,返回对象本身。
  • takeIf/takeUnless: 根据条件反对对象或null

1.1 let

  • 用法: 常用于安全调用(例如处理可空类型)。
  • 返回值: lambda 表达式的结果。
  • this指代: 作为 it 传递。
  • 示例:
val name: String? = "Kotlin"
name?.let {
    println("Length: ${it.length}")
}

1.2 with

  • 用法: 适用于对同一个对象进行多次操作。
  • 返回值: lambda 表达式的结果。
  • this指代: 直接作为 this 使用。
  • 示例:
val builder = StringBuilder()
val result = with(builder) {
    append("Hello, ")
    append("World!")
    toString()
}

1.3 run

  • 用法: 用于执行一个lambda表达式,类似于 let,也常用于对象配置。
  • 返回值: lambda 表达式的结果。
  • this指代: 直接作为 this 使用。
  • 示例:
val greeting = "Hello".run {
    this + " World"
}

1.4 apply

  • 用法: 用于配置对象,通过调用进行初始化。
  • 返回值: 原始对象。
  • this指代: 直接作为 this 使用。
  • 示例:
val person = Person().apply {
    name = "John"
    age = 30
}

返回的是 Person 对象

1.5 also

  • 用法: 用于执行一些需要更新或处理对象但返回对象本身的操作。
  • 返回值: 原始对象。
  • this指代: 作为 it 传递。
  • 示例:
val number = 5.also {
    println("Processing number: $it")
}

返回的是 5

1.6 takeIf

  • 用法: 如果给定的谓词(条件)为 true,则返回对象本身;否则返回 null。
  • 示例:
val number = 10
val result = number.takeIf { it > 5 }  // 如果条件为 true,返回 10;否则返回 null
println(result)  // 输出: 10

val smallNumber = 3
val smallResult = smallNumber.takeIf { it > 5 }
println(smallResult)  // 输出: null

1.7 takeUnless

  • 用法: 如果给定的谓词(条件)为 false,则返回对象本身;否则返回 null。这是 takeIf 的反义函数。
  • 示例:
val number = 10
val result = number.takeUnless { it < 5 }  // 如果条件为 false,返回 10;否则返回 null
println(result)  // 输出: 10

val smallNumber = 3
val smallResult = smallNumber.takeUnless { it < 5 }
println(smallResult)  // 输出: null
最后更新于