En este tutorial aprenderás sobre la sintaxis y uso de la función run
en Kotlin. Una función de alcance de la librería estándar, que te permite empaquetar inicializaciones y retornar resultados en un mismo bloque de código.
La Función run()
run
hace parte de las funciones de alcance que Kotlin te provee para mejorar la legibilidad y hacer más conciso tu código.
Al igual que la función let, toma una función lambda como parámetro, ejecuta sus sentencias y retorna como resultado el valor computado desde R
.
inline fun <T, R> T.run(block: T.() -> R): R
La única diferencia es que el parámetro block
es un tipo función con recibidor, por lo que debes usar la expresión this
para referirte al objeto recibidor.
fun main() {
val resultado = "Ejemplo".run {
println("El String \"$this\" tiene $length caracteres")
length
}
}
En el ejemplo anterior podemos usar this
para referirnos al contenido del String y acceder directamente a length
, ya que el objeto recibidor de la lambda es el contexto del alcance en el bloque de código.
run Sin Lambda Con Recibidor
La función run{}
tiene otra firma donde no está escrita como función de extensión, sino que simplemente ejecuta el bloque de código que le pasemos como lambda en el parámetro block
:
inline fun <R> run(block: () -> R): R
Esta retorna el valor de la última línea en el cuerpo de la lambda proveída como argumento.
Por ejemplo, supongamos que deseamos escribir las sentencias para obtener el promedio de la lectura de dos temperaturas.
Ya que dicha expresión es asignable, podemos escribirlas al interior de run
para verlas como un bloque asociado:
fun main() {
val computo = run {
val random = Random()
val tempA = random.nextFloat() * 50
val tempB = random.nextFloat() * 50
(tempA + tempB) / 2
}
print(computo)
}
Como ves, run
te permite empaquetar la asignación a computo
, con el fin de comprender mejor la responsabilidad de la secuencia de pasos, a la hora de obtener el promedio.