3 librerías de Kotlin para programar aplicaciones Android

Kotlin y su lenguaje versátil

Desde que Google anunció en la Keynote I/O17 el soporte oficial a Kotlin, en Movetia nos hemos puesto manos a la obra, con el objetivo de exprimir al máximo todas las características del lenguaje de JetBrains.

En este artículo, describiremos brevemente 3 librerías de Kotlin que facilitan enormemente la programación de aplicaciones Android. Y tú… ¿cuáles utilizas en el desarrollo?

Kotlin aplicaciones Android blog Movetia

Anko

Anko es un stack de utilidades creado con el fin de incrementar la productividad de los desarrolladores. Además, proporciona de manera rápida un código limpio y fácil de leer.

Internamente, incluye 4 módulos:

  • Anko Commons: Es una “tool box” que, al igual que KAndroid, facilita la interacción con elementos del framework de Android (como Intent, Dialog o el log de la aplicación).
  • Anko Layouts: Permite el diseño de interfaces gráficas de usuario de manera programática, es decir, desde el código fuente, eliminando así la necesidad de los archivos XML.
    verticalLayout {
        val name = editText()
        button("Say Hello") {
            onClick { toast("Hello, ${name.text}!") }
        }
    }
  • Anko SQLite: ¿Cansado de seguir siempre la misma “ceremonía” para comunicar con la base de datos…? Despídete del uso de cursores y otros objetos gracias a esta librería, que reduce drásticamente el número de elementos necesarios para comunicarse con el repositorio y proporciona una sintaxis muy parecida a SQL.
    fun getUsers(db: ManagedSQLiteOpenHelper): List = db.use {
        db.select("Users")
                .whereSimple("family_name = ?", "John")
                .doExec()
                .parseList(UserParser)
    }
  • Anko Coroutines: Las corrutinas mejoran la legibilidad del código asíncrono de nuestras apps. ¿Cómo? Básicamente, prescinden de los callbacks usados para notificar que una determinada operación ha terminado de ejecutarse. En su lugar, permiten escribir las diferentes acciones de manera secuencial. De esta manera, el orden en el que declaramos las instrucciones determina el orden en que se ejecutarán las operaciones.
    fun getData(): Data { ... }
    fun showData(data: Data) { ... }
    
    async(UI) {
        val data: Deferred = bg {
    	// Runs in background
    	getData()
        }
    
        // This code is executed on the UI thread
        showData(data.await())
    }

KAndroid

KAndroid es una librería diseñada para explotar una de las características más importantes de Kotlin: las extensiones, que permiten añadir comportamiento a las propiedades y métodos de cualquier clase.

Incluye diferentes utilidades para reducir el “boilerplate code” y evitar duplicidades de código.

// instead of findViewById(R.id.textView) as TextView
val textView = find<TextView>(R.id.textView)
/* instead of:
editText.addTextChangedListener(object : TextWatcher {
    override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
        before()
    }
    override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
        onChange()
    }
    override fun afterTextChanged(s: Editable?) {
        after()
    }
}) */
editText.textWatcher {
    beforeTextChanged { text, start, count, after -> before() }
    onTextChanged { text, start, before, count -> onChange() }
    afterTextChanged { text -> after() }
}
// instead of LayoutInflater.from(context).inflate(R.layout.some_layout, null, false)
context.inflateLayout(R.layout.some_layout)
// or
context.inflateLayout(R.layout.some_layout, attachToRoot = true)

Como se puede ver, además de ahorrarnos algunas valiosas líneas de código, el programa resultante es mucho más legible, puesto que se omite toda la verbosidad típica de otros lenguajes como, por ejemplo, Java.

PreferenceHolder

La librería PreferenceHolder hace entretenidas las siempre tediosas Shared Preferences de Android… ¿Por qué? Porqué permite encapsular en un objeto todas las parejas clave-valor a almacenar.

object UserPref: PreferenceHolder() {
    var canEatPie: Boolean by bindToPreferenceField(true)
    var allPieInTheWorld: Long by bindToPreferenceField(0)

    var isMonsterKiller: Boolean? by bindToPreferenceFieldNullable()
    var monstersKilled: Int? by bindToPreferenceFieldNullable()
}

Una vez declarado, el anterior elemento abstrae la manipulación de los valores guardados en preferencias, que se tratan como propiedades del mismo, prescindiendo así del PreferenceManager:

if(Pref.canEatPie) //...

En conclusión

Todas estas librerías son simplemente una pequeña muestra del enorme potencial de Kotlin que, a pesar de ser un lenguaje de programación orientada a objetos, incluye las principales características de la programación funcional. Dicha combinación proporciona un lenguaje muy versátil que, además, aporta un soplo de aire fresco en el desarrollo de aplicaciones móviles Android. Ante este escenario, ahora solo falta ver si las características de las próximas versiones de Java permitirán actualizar dicho lenguaje. En Movetia seguiremos atentos…

Acerca de: Desarrollo Movetia

Mucho más que diseño y desarrollo. Transformamos procesos empresariales en servicios digitales eficientes para un mundo en movimiento.