Uso de funciones de alcance en Kotlin
- Funciones de alcance en Kotlin
- Usar funciones de alcance en Kotlin
-
Use la función de alcance
also
en Kotlin -
Use la función de alcance
let
en Kotlin -
Use la función de alcance
apply
en Kotlin -
Use la función de alcance
run
en Kotlin -
Use la función de alcance
with
en Kotlin
Este artículo discutirá la función de alcance also
en Kotlin. También repasaremos las otras funciones de alcance disponibles en Kotlin.
Pero primero, comprendamos qué son las funciones de alcance.
Funciones de alcance en Kotlin
Kotlin tiene muchas funciones creadas únicamente para ejecutar una pieza de código en el contexto de un objeto. Estas funciones se denominan funciones de alcance.
Las funciones de ámbito crean un ámbito temporal para el objeto cuando las llamamos con una expresión lambda. Hay 5 funciones de alcance en Kotlin, a saber, also
, let
, apply
, run
y with
.
Si bien todas las funciones de alcance en Kotlin realizan la misma función, la diferencia es cómo el objeto dentro de ese bloque está disponible después de la ejecución. Según el valor de retorno y la referencia del objeto, debemos elegir una de las cinco funciones de alcance.
La siguiente tabla muestra la referencia de objeto y el valor de retorno de cada función de alcance.
Función de alcance | Referencia de objeto | Valor de retorno | Función de extensión |
---|---|---|---|
also |
it |
Valor Lambda | Es una función de extensión. |
let |
this |
Valor Lambda | Es una función de extensión. |
apply |
- | Valor Lambda | No es una función de extensión. |
run |
this |
Valor Lambda | No es una función de extensión. |
run |
this |
Objeto de contexto | Es una función de extensión. |
with |
it |
Objeto de contexto | Es una función de extensión. |
Usar funciones de alcance en Kotlin
El siguiente ejemplo demuestra el uso de funciones de alcance en Kotlin. En este código, usaremos la función let
para crear el alcance del objeto Estudiantes.
data class Student(var firstName: String, var lastName: String, var age: Int, var address: String) {
fun moving(newAddress: String) { address = newAddress }
fun ageIncrease() { age++ }
}
fun main() {
Student("David", "Miller", 24, "New York").let {
println(it)
it.moving("Chicago")
it.ageIncrease()
println(it)
}
}
Producción:
La función de ámbito se refiere al objeto Estudiante como eso
en la salida. Sin usar la función de alcance, habríamos tenido que declarar una nueva variable e inicializarla con el valor del objeto Student para acceder a ella.
Use la función de alcance also
en Kotlin
Como se menciona en la tabla anterior, la función also
en Kotlin proporciona un objeto de contexto como argumento (it
). Podemos usar also
cuando necesitamos realizar acciones que toman el objeto de contexto como argumento de cualquier función.
Otra excelente manera de usar also
en Kotlin es cuando necesitamos una referencia directa al objeto en sí y no a sus propiedades o función. Considere el siguiente ejemplo para comprender la función also
en Kotlin.
fun main() {
val numList = mutableListOf("one", "three", "five")
numList
.also { println("Elements in the list before adding a new one: $it") }
.add("seven")
println("Elements in the list after adding a new one: " + numList)
}
Producción:
Use la función de alcance let
en Kotlin
La función de alcance let
en Kotlin proporciona el objeto de contexto como un argumento it
. Su valor devuelto es el resultado de la ejecución de lambda.
Podemos usar la función let
para invocar múltiples funciones para acumular resultados de cadenas de llamadas.
fun main() {
val numList = mutableListOf("one", "three", "five", "seven", "nine")
val resList = numList.map { it.length }.filter { it > 3 }
println(resList)
}
Producción :
[5,4,5,4]
En lugar de usar resList
en el ejemplo anterior, podemos usar la función de alcance let
para imprimir los resultados lambda.
fun main() {
val numList = mutableListOf("one", "three", "five", "seven", "nine")
numList.map { it.length }.filter { it > 3 }.let{
println(it)
//We can add more functions here
}
}
Producción :
[5,4,5,4]
Si el código tiene solo una función, podemos reemplazar la lambda (it
) con el símbolo de referencia del método (::
).
fun main() {
val numList = mutableListOf("one", "three", "five", "seven", "nine")
numList.map { it.length }.filter { it > 3 }.let(::println)
}
Producción :
[5,4,5,4]
Use la función de alcance apply
en Kotlin
Cuando se usa la función apply
en Kotlin (this
), el objeto de contexto está disponible como receptor. Podemos usar la función apply
en bloques de código que no tienen ningún valor de retorno.
El caso de uso más común es durante la configuración de objetos. Considere el siguiente ejemplo donde creamos un objeto Estudiante y luego lo configuramos.
data class Student(var Name: String, var age: Int = 0, var address: String = "")
fun main() {
val david = Student("David Miller").apply {
age = 24
address = "New York"
}
println(david)
}
Producción:
Use la función de alcance run
en Kotlin
Obtenemos el objeto de contexto como el receptor (this
) mientras usamos la función run
en Kotlin. El resultado de la ejecución de lambda es en sí mismo el valor de retorno de esta función de ámbito.
La función run
es más útil cuando lambda tiene tanto la inicialización del objeto como el cálculo del valor de retorno.
class port(var url: String, var portNum: Int) {
fun initialRequest(): String = "Initial default request"
fun res(request: String): String = "This is the result of query '$request'"
}
fun main() {
val portService = port("https://example.kotlinlang.org", 80)
val finalResult = portService.run {
portNum = 8080
res(initialRequest() + " to port $portNum")
}
// the same code written with let() function:
val letResult = portService.let {
it.portNum = 8080
it.res(it.initialRequest() + " to port ${it.portNum}")
}
println(finalResult)
println(letResult)
}
Producción:
También podemos usar ejecutar
en Kotlin como una función sin extensión. Esto significa que ejecutará un bloque de declaraciones que requiere expresiones.
fun main() {
val hexNum = run {
val dig = "0-9"
val hexDig = "A-Fa-f"
val indication = "+-"
Regex("[$indication]?[$dig$hexDig]+")
}
for (match in hexNum.findAll("+139 -ABFF 79")) {
println(match.value)
}
}
Producción :
+139
-ABFF
79
Use la función de alcance with
en Kotlin
La función with
también es una función sin extensión, como run
. Lo que pasa con la función with
es que se pasa como argumento pero está disponible como receptor.
El with
se usa mejor para llamar a funciones en el objeto de contexto donde no queremos proporcionar los resultados lambda.
fun main() {
val num = mutableListOf("one", "three", "five", "seven")
with(num) {
println("The function 'with' is called with argument $this")
println("The function contains $size items")
}
}
Producción:
Kailash Vaviya is a freelance writer who started writing in 2019 and has never stopped since then as he fell in love with it. He has a soft corner for technology and likes to read, learn, and write about it. His content is focused on providing information to help build a brand presence and gain engagement.
LinkedIn