Se encargan de llevar a cabo la ejecución de un bloque de código sobre un objeto.

Tipo Referencia Objetivo
let it Trabajar con objetos no nulos y transformar
run this Ejecutar operaciones complejas
with this Realizar operaciones en el mismo objeto
apply this Realizar operaciones en el mismo objeto
also it Operaciones adicionales sin modificar

Let

val nombre = "Kotlin"
val longitud = nombre.let {
    println("El nombre es: $it") // El nombre es: Kotlin
    it.length
}

println("Longitud: $longitud") // Longitud: 6

Run

val resultado = "Kotlin".run {
    println("Trabajando con $this")
    length // Devuelve la longitud del String
}

println("Longitud: $resultado") // Longitud: 6

With

val persona = "Ana"
val mensaje = with(persona) {
    println("Hola, $this")
    length
}

println("Longitud del nombre: $mensaje")
// Longitud del nombre: 3

Apply

data class Persona(var nombre: String, var edad: Int)
val persona = Persona("Ana", 25).apply {
    nombre = "Ana María"
    edad = 26
}

println(persona) // Persona(nombre=Ana María, edad=26)

Also

val nombre = "Kotlin".also {
    println("El nombre es $it")
}

println("Nombre final: $nombre") // Nombre final: Kotlin