Android / Java — ¿Y si le agregamos funciones a la clase con #Kotlin?

Armando Picón
DevPicon by Armando
2 min readFeb 23, 2017
Una función que agregué a ImageView

Cuando hacemos uso de un lenguaje de programación como Kotlin, a menudo debemos lidiar con bibliotecas de código que están escritas con Java. En sí esto no es malo; sin embargo, en ocasiones sería genial que parte de estas bibliotecas emplearan algunas de las cosas que trae consigo un lenguaje como Kotlin. En Kotlin esto es posible mediante una característica llamada extension functions.

Una extension function es una función que puede ser invocada como cualquier otro método de una clase, es como si formara parte de su implementación, pero sin necesariamente estarlo.

Como ejemplo, vamos a agregarle una función a la clase ImageView para que directamente nos cargue una imagen, casualmente en la aplicación que venía trabajando debía cargar imágenes en varios lados.

package pe.devpicon.android.marvelcomic.utils

import android.widget.ImageView
import com.bumptech.glide.Glide

/**
* Created by Armando on 23/2/2017.
*/
fun ImageView.loadImage(url: String){

Glide.with(this.context)
.load(url)
.fitCenter()
.override(48, 48)
.into(this)

}

Ahora, vamos a reemplazar nuestro código original:

class ComicViewHolder(itemView: View, val itemClick: OnItemClickListener) : RecyclerView.ViewHolder(itemView) {

fun bindComic(comic: Comic?) {
if(comic != null){
with(comic) {
Log.d(javaClass.simpleName, comic.toString())

Glide.with(itemView.context)
.load(thumbnailUrl)
.fitCenter()
.override(48, 48)
.into(itemView.img_comic_cover)


itemView.txt_comic_name.text = title
itemView.txt_comic_price.text = if (price > 0) price.toString() else itemView.context.getString(R.string.message_not_available)
itemView.setOnClickListener { itemClick(this) }
}
}
}

}

Por nuestra nueva función:

import pe.devpicon.android.marvelcomic.utils.loadImage//..//class ComicViewHolder(itemView: View, val itemClick: OnItemClickListener) : RecyclerView.ViewHolder(itemView) {

fun bindComic(comic: Comic?) {
if(comic != null){
with(comic) {
Log.d(javaClass.simpleName, comic.toString())

itemView.img_comic_cover.loadImage(thumbnailUrl?:"")

itemView.txt_comic_name.text = title
itemView.txt_comic_price.text = if (price > 0) price.toString() else itemView.context.getString(R.string.message_not_available)
itemView.setOnClickListener { itemClick(this) }
}
}
}

}

Tomen nota de que al agregar una función esta igual debe importarse para que nuestro código lo pueda reconocer. Sin embargo, a pesar de ello, al momento de programar el asistente igual lo reconocerá como una función propia de la clase entonces no necesitamos hacer el import primero.

Y así, de este modo podemos escribir extension functions y de este modo agregar funciones que puedan aprovechar Kotlin o hacer cosas particulares que nuestras bibliotecas no hacen por defecto.

Espero que les haya servido. Si quieren leer algunos otros artículos sobre Kotlin pueden visitar este otro post.

Si te gustó este artículo, no olvides marcar el corazón

--

--

Armando Picón
DevPicon by Armando

lifelong learner • 👨🏽‍💻 Android eng (ex: @uber ) • 🇵🇪 @ 🇨🇱 • @gdgopen • content creator @devpicon | @primosauda