Usa la palabra clave with en Kotlin
- Generar un Proyecto Kotlin
- Invocar un objeto explícitamente en Kotlin
-
Use la palabra clave
with
para llamar a un objeto implícitamente sin un valor de retorno en Kotlin -
Use la palabra clave
with
para llamar a un objeto implícitamente con un valor de retorno en Kotlin - Conclusión
En la programación orientada a objetos, aprendimos que los objetos se componen de propiedades y métodos. Para acceder a estos datos, los llamamos explícitamente usando el .
operador y luego proporcionando el campo o el nombre de la propiedad.
Este es el enfoque comúnmente utilizado en la mayoría de los lenguajes de programación cuando se trabaja con objetos, pero no es la única forma. Podemos llamar implícitamente a las propiedades y métodos de los miembros de un objeto usando expresiones genéricas y lambda.
Este tutorial nos enseñará cómo llamar implícitamente a las propiedades y métodos de los miembros de un objeto.
Generar un Proyecto Kotlin
Abra el entorno de desarrollo IntelliJ y seleccione Archivo > Nuevo > Proyecto
. En la ventana que se abre, ingrese el nombre del proyecto como kotlin-with
, seleccione Kotlin en la sección Idioma e Intellij en la sección Sistema de compilación.
Cree un archivo llamado Main.kt
en la carpeta src/main/kotlin
y copie y pegue el siguiente código en el archivo.
data class Music(val id: Int,
val title: String,
val genre: String,
val duration: Int);
fun fetchMusic(): ArrayList<Music>{
return arrayListOf(
Music(1,"Passing me by","Hip hop",5),
Music(2,"Lose yourself","Hip hop",3),
Music(3,"Smoke on the water","Classic songs",6),
Music(4,"Born to the wild","Classic songs",2),
Music(5,"Real love","Rhythm and blues",6)
);
}
Este código crea un método llamado fetchMusic()
que devuelve una ArrayList de objetos creados usando la clase de datos Música
. Usaremos la lista devuelta por el método de música fetchMusic()
para ilustrar nuestros ejemplos en las siguientes secciones.
Invocar un objeto explícitamente en Kotlin
Copie y pegue el siguiente código en el archivo Main.kt
después del método fetchMusic()
.
fun callingAnObject(){
val songs = fetchMusic();
songs.forEach(::println);
}
fun main(){
callingAnObject();
}
La función denominada callingAnObject()
utiliza la lista que hemos creado anteriormente para llamar explícitamente al método forEach()
para registrar todos los elementos de la lista en la consola. Tenga en cuenta cómo llamamos explícitamente al objeto de lista songs.forEach()
como se mencionó en la sección anterior.
En las siguientes secciones, veremos cómo invocar implícitamente el objeto songs
para obtener acceso a cualquier variable miembro o método. Ejecute este ejemplo y asegúrese de que el resultado sea como se muestra a continuación.
Music(id=1, title=Passing me by, genre=Hip hop, duration=5)
Music(id=2, title=Lose yourself, genre=Hip hop, duration=3)
Music(id=3, title=Smoke on the water, genre=Classic songs, duration=6)
Music(id=4, title=Born to the wild, genre=Classic songs, duration=2)
Music(id=5, title=Real love, genre=Rhythm and blues, duration=6)
Use la palabra clave with
para llamar a un objeto implícitamente sin un valor de retorno en Kotlin
Comente el ejemplo anterior y copie y pegue el siguiente código en el archivo Main.kt
después del comentario.
fun usingWithWithoutReturnValue(){
val songs = fetchMusic();
with(songs){
println(isEmpty());
println(add(Music(6,"Many rivers to cross","reggae",3)))
println(forEach(::println));
}
}
fun main(){
usingWithWithoutReturnValue();
}
Usualmente usamos la función with()
en Kotlin cuando queremos invocar un objeto implícitamente, como se muestra en este ejemplo. Observe cómo llamamos implícitamente a los métodos isEmpty()
, add()
y forEach()
a la lista sin usar su objeto.
La función with()
usa esta lista como receptor y llama a cualquier campo o método de la lista en segundo plano una vez que los solicitamos, y se devuelve el resultado. En este caso de uso, la función with()
no devuelve ningún valor, sino que los registra en la consola.
En la siguiente sección, veremos cómo devolver el resultado de la llamada realizada entre bastidores. Ejecute este ejemplo y asegúrese de que el resultado sea como se muestra a continuación.
false
true
Music(id=1, title=Passing me by, genre=Hip hop, duration=5)
Music(id=2, title=Lose yourself, genre=Hip hop, duration=3)
Music(id=3, title=Smoke on the water, genre=Classic songs, duration=6)
Music(id=4, title=Born to the wild, genre=Classic songs, duration=2)
Music(id=5, title=Real love, genre=Rhythm and blues, duration=6)
Music(id=6, title=Many rivers to cross, genre=reggae, duration=3)
Use la palabra clave with
para llamar a un objeto implícitamente con un valor de retorno en Kotlin
Comente el ejemplo anterior y copie y pegue el siguiente código en el archivo Main.kt
después del comentario.
fun usingWithContainingReturnValue(): Music {
val songs = fetchMusic();
val song = with(songs) {
get(1)
}
return song;
}
fun main(){
println(usingWithContainingReturnValue());
}
En el ejemplo anterior, mencionamos que with()
invoca una propiedad o método de esta lista en segundo plano y devuelve el resultado de la llamada. Este ejemplo muestra cómo recuperar el resultado devuelto por la llamada.
En este ejemplo, hemos usado el método with()
para invocar el objeto songs
explícitamente para devolver el objeto en el índice 1
usando el método get()
. Note cómo invocamos el método get()
dentro de la función with()
sin usar su objeto.
Tenga en cuenta que el objeto devuelto por la función de inclusión es del tipo Música
. Ejecute este código y asegúrese de que el resultado sea como se muestra a continuación.
Music(id=2, title=Lose yourself, genre=Hip hop, duration=3)
Conclusión
En este tutorial, hemos aprendido a usar el método with()
que nos ayuda a invocar implícitamente un objeto. Los dos casos de uso que hemos cubierto incluyen llamar a un objeto implícitamente sin un valor de retorno y llamar a un objeto implícitamente con un valor de retorno.
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub