fbpx

CONEXIONHR

CONEXIONHR

Tu aplicación Android de Java a Kotlin ¿Por dónde empezar?

Ya es de público conocimiento que Kotlin es el lenguaje de programación estándar para desarrollar en Android. Es totalmente retrocompatible con Java, fue reconocido por Google durante el evento Google I/O 2017 y hoy en día se presentan librerías en modo Kotlin first, es decir, permitiendo aprovechar las ventajas de este lenguaje.

Pero antes de llegar al punto de poder obtener el máximo provecho de Kotlin hay un camino que recorrer. Es necesario saber que aún hay muchos equipos de desarrollo manteniendo aplicaciones que ya llevan varios años de existencia y que, naturalmente, han sido escritas en Java. Entonces, si este es tu caso y te gustaría comenzar a convertir tu aplicación a Kotlin, es esperable que tu inquietud sea: ¿Por dónde empiezo?

Es importante que, para estar tomar la decisión sin miedo, sepas que:

  • Kotlin es compatible con Java: Es decir, puedes comenzar convirtiendo algunas pocas clases y tu proyecto continuará funcionando. Es normal que en tus proyectos convivan ambos lenguajes.
  • Para comenzar, no necesitas total conocimiento sobre el lenguaje. Android Studio contiene una herramienta de conversión automática de Java a Kotlin que se ejecuta cuando pegas código Java en un archivo .kt o bien puedes ejecutar manualmente seleccionando cualquier archivo .java y seleccionando Convert Java file to Kotlin file. Es recomendable que reescribas tu código a conciencia, pero si estás en una etapa de aprendizaje, esto puede ayudarte con tus primeros pasos. Adicionalmente es posible que el código generado requiera algunas modificaciones para su optimización.
  • Para mantener el ritmo de aprendizaje y llevar a cabo definitivamente la migración de tu proyecto a Kotlin, te recomiendo que cada vez que tengas que escribir una clase nueva, tomes como desafío escribirla en Kotlin. Al principio puede resultarte complicado, pero recuerda que tus conocimientos de Java son totalmente aprovechables. Puede llevarte un tiempo acostumbrarte a la nueva sintaxis, pero como todo, es cuestión de práctica.

En este artículo aprenderás a migrar a Kotlin las clases más simples de tu proyecto, para familiarizarte con el lenguaje aplicado a tus clases más cortas y menos complejas.


Entidades o clases de modelo

Uno de los primeros cambios que puedes llevar a cabo, es migrar a Kotlin tus entidades de modelo y DTOs. Todas las clases que simplemente contengan sus atributos, getters y setters pueden ser fácilmente convertidas a una data class.

Veamos un ejemplo. Si tenemos una clase con el siguiente formato:

public class Usuario implements Serializable {

    private String nombre;
    private Long id;
    @SerializedName(\"urlAvatar\")
    private String avatar;
    
    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getAvatar() {
        return avatar;
    }

    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }
}

podemos convertirla a:

data class Usuario (
    var nombre: String?,
    var id: Long?, 
    @SerializedName(\"urlAvatar\") 
    var avatar: String?) : Serializable

A saber: Kotlin introduce el concepto de data class. Es decir, clases que “guardan” datos. Los getter y setters son generados automáticamente. Pero no solamente eso: Además genera automáticamente los métodos hashCode()equals()toString() y copy().

De esta forma, puedes comenzar convirtiendo, por ejemplo, las clases que modelan el body de un request o un response.

Interfaces

Puedes comenzar la migración en las partes de tu proyecto que contengan menos (o nada de) lógica. Además de las clases de modelo, puedes convertir las interfaces.

Por ejemplo, partiendo de un ejemplo como el siguiente:

public interface RepositorioUsuarios {
    List<Usuario> obtenerTodos();
    Usuario obtener(Long id);
    void guardar(Usuario usuario);
}

podríamos convertirlo a:

interface RepositorioUsuarios {
    fun obtenerTodos(): List<Usuario>
    fun obtener(id: Long?): Usuario?
    fun guardar(usuario: Usuario)
}

A saber: Este es un ejemplo típico en el cual la migración no conlleva grandes modificaciones. Sin embargo, el concepto de interfaz en Kotlin difiere del de Java. Una gran diferencia es que en Kotlin las interfaces permiten incluir implementación de sus funciones.

Singleton

Seguramente tu proyecto contiene alguna o varias clases util o, por ejemplo, el cliente de networking, que pueden estar implementados siguiendo el patrón de diseño Singleton. Kotlin ha facilitado la implementación de este patrón, permitiéndonos definir una única instancia de cierta clase.

Supongamos que queremos migrar una clase como la siguiente:

public class FechaUtil {

    private static final FechaUtil instance = new FechaUtil();

    private FechaUtil() {}

    public static FechaUtil getInstance() {
        return instance;
    }

    public String format(Date date) {
        return new SimpleDateFormat(\"dd/MM/yyyy\").format(date);
    }
}

Podríamos obtener una versión en Kotlin que quedaría de la siguiente forma:

object FechaUtil {
    
    fun format(date: Date) = 
         SimpleDateFormat(\"dd/MM/yyyy\").format(date)
}

A saber: Kotlin introduce el concepto de object que permite definir una única implementación de un objeto que será accesible desde todo el proyecto, como una única instancia. Es decir, siguiendo el patrón de diseño Singleton.


Los anteriores ejemplos han sido algunos consejos de cambios fáciles que podemos realizar, en líneas generales, rápidamente como para comenzar a introducir código Kotlin en nuestro proyecto. ¡Desde luego que hay mucho más por hacer!. Algunas consideraciones que puedes tener en cuenta para dar algunos pasos más son:

  • Convirtiendo nuestras actividades o fragmentos a Kotlin, podemos deshacernos de los molestos findViewById() osi la utilizas, de la librería Butterknife y acceder a los Views de tu layout directamente por id. Verás que se importará automáticamente:
import kotlinx.android.synthetic.main.actividad_login.*
  • Convertir tus adapters (de RecyclerView o ViewPagers, por ejemplo) debería resultarte relativamente sencillo, ya que usualmente en esas clases encontramos código boilerplate que Kotlin puede ayudarte a escribir en menos líneas.
  • Haciendo uso de la librería Android KTX (Kotlin extensions) puedes lograr mejoras en la claridad de tu código. Por ejemplo, veamos cómo podemos cambiar la visibilidad de un View desde Java:
opcion1.setVisibility(View.VISIBLE)

y cómo podemos reducir la expresión gracias a KTX:

opcion1.isVisible = true

Espero que estos consejos te hayan servido como motivación para iniciar la migración de tu proyecto. ¡Realmente vale la pena!


Enlaces de interés


Sobre la autora: Mi nombre es Maribel Maisano. Soy Ingeniera en Computación y me especializo en el desarrollo de aplicaciones Android. Soy co-organizadora y WTM Ambassador en GDG&WTM Buenos Aires.

Linkedin: https://www.linkedin.com/in/maribelmai/

Twitter: https://twitter.com/maribelmai

Share this post

en_US
💬 ¿Necesitas ayuda?