Java ha sido el lenguaje para desarrollar aplicaciones para Android desde el comienzo, sin embargo, Kotlin se ha ganado un justo lugar como el lenguaje ideal para esta tarea, gracias a su sencilla filosofía de uso y muchas ventajas que tiene sobre Java.
Ambos lenguajes soportan el paradigma de programación orientada a objetos, por lo tanto, con conocimiento de los conceptos del paradigma, el primer paso para hacer la transición de Java a Kotlin es entender cómo implementar clases, propiedades y métodos.
El contexto para el ejemplo
Un cuadrado es una figura geométrica de cuatro lados iguales, con cuatro ángulos internos de 90 grados, su área se calcula elevando el valor de su lado al cuadrado.
Implementaremos una clase que representa un cuadrado, sin métodos y con dos propiedades de solo lectura:
- lado : la medida de su lado,
- area : el área correspondiente.
1. Java
La declaración de la clase es la siguiente:
public class Cuadrado { }
En Java, la implementación básica de una propiedad consta de 3 elementos:
- una variable interna a la clase para guardar el valor (field),
- una función pública accesora para recuperar el valor (getter),
- una función mutadora para modificar el valor (setter).
Si la propiedad es de lectura/escritura se implementan ambas funciones (getter y setter); si es de solo lectura se implementa únicamente la función accesora (getter); si es de solo escritura se implementa únicamente la función mutadora (setter).
Para nuestro ejemplo, siguiendo las prácticas de Java, la implementación de las propiedades es la siguiente:
El constructor de una clase es una función especial cuyo objetivo es “construir” un objeto, es decir, solicitar la memoria necesaria e inicializar sus valores internosl; si para este proceso de construcción es necesario proporcionar datos, estos se reciben por medio de parámetros.
En nuestra clase Cuadrado, el constructor recibe el valor del lado del cuadrado y calcula el área.
La clase completa en Java queda como sigue:
public class Cuadrado { private double lado;
private double area; public double getLado() {
return lado;
}
public double getArea() {
return area;
}
}
El constructor de una clase es una función especial cuyo objetivo es “construir” un objeto, es decir, solicitar la memoria necesaria e inicializar sus valores internosl; si para este proceso de construcción es necesario proporcionar datos, estos se reciben por medio de parámetros.
En nuestra clase Cuadrado, el constructor recibe el valor del lado del cuadrado y calcula el área.
La clase completa en Java queda como sigue:
public class Cuadrado { private double lado;
private double area; public Cuadrado(double l) {
lado = l;
area = lado * lado;
} public double getLado() {
return lado;
}
public double getArea() {
return area;
}
}
2. Kotlin
La declaración de la clase es:
class Cuadrado {}
El nivel de acceso de la clase por omisión es public por lo que no es necesario escribirlo en el código.
En Kotlin, la implementación básica de una propiedad consiste en declararla dentro de la clase:
- var : para una propiedad de lectura/escritura,
- val : para una propiedad de solo lectura.
Para nuestro ejemplo, la implementación es la siguiente:
class Cuadrado { val lado : Double
val area : Double}
En Kotlin, las variables internas (fields) no se declaran, en caso de ser necesarias, son generadas automáticamente. De igual manera, tampoco es necesario implementar el getter y setter estándar de cada propiedad, ya que también se genera automáticamente.
Las clases en Kotlin tienen un constructor primario y pueden tener uno o varios constructores secundarios.
Cuando el constructor primario no recibe parámetros, se omite en el código. En cambio, cuando los parámetros son necesarios, el constructor primario se declara junto con la clase.
Incluyendo el constructor en nuestro ejemplo, queda:
class Cuadrado constructor(l: Double) { val lado : Double
val area : Double}
Si el constructor primario no tiene anotaciones o modificadores de visibilidad, se puede omitir la palabra constructor:
class Cuadrado(l : Double) {
val lado : Double
val area : Double
}
El constructor primario no tiene código asociado, para esto se usa el bloque init { … }.
La clase completa en Kotlin queda:
class Cuadrado(l : Double) { val lado : Double
val area : Double init {
lado = l
area = lado * lado
}
}
3. Más Kotlin
En Kotlin, las propiedades pueden ser declaradas directamente en el constructor primario, evitando recibir un parámetro para luego asignarlo a la propiedad.
class Cuadrado(val lado: Double) { val area : Double init {
area = lado * lado
}
}
También podemos unir la declaración con la inicialización de una propiedad, lo que en este caso implicaría que no sea necesario el bloque init.
El código final de la clas en Kotlin quedaría:
class Cuadrado(val lado: Double) { val area = lado * lado}
Usando Kotlin con sus características, nuestra clase Cuadrado tiene únicamente 3 líneas, contra la versión de Java con 14 líneas de código.
Si te interesa saber más te invitamos a leer la Parte 2, De Java a Kotlin: Primeros Pasos
Escrito por José Luis Barrera Canto.
José Luis Barrera Canto ha desarrollado software durante más de 25 años con experiencia en proyectos para iniciativa privada y para el sector público, socio fundador de varias firmas de desarrollo de software actualmente científico de datos y consultor empresarial. Para cualquier consulta su correo es jose.luis.barrera.canto@gmail.com