[KfS04] Sintaxis Basica en Kotlin III. Java vs Kotlin Round #3.

Kotlin by JetBrains

En este articulo voy a ponerme al día con la serie de artículos sobre Kotlin, primeramente quiero ofrecerte una disculpa por la demora entre este post y el anterior. Ahora continuemos, en este articulo abordaremos lo básico de las Clases y Objetos en Kotlin y su comparación con Java.

Clases

Las clases son las bases de la programación orientada a objetos (OOP), que nos permite abstraer nuestro código por medio del modelado de objetos. Para crear una clase en Kotlin usamos la palabra reservada class al igual que los demás lenguajes, En Kotlin las clases son publicas por defecto y no es necesario colocarlo a diferencia de Java.

Definicion de Clases

Propiedades

Las propiedades en Kotlin son muy fáciles de definir, solo basta con especificar si serán mutable (var) o inmutables (val), esto traerá algo muy interesante.

Propiedades

Lo primero que notamos con la propiedades en Kotlin es que deben ser inicializadas con un valor por defecto. Debido a que Kotlin nos generará su método getter y su setter de cada propiedad en en caso de se mutable y en el caso de ser inmutable solo tendremos acceso a ella (getter) pero no podemos modificarla mas adelante. Su contraparte en Java seria definiendo las propiedades como privadas y generamos los métodos getters y setters respectivos quedando de la siguiente forma.

Getters y Setters

En Kotlin no habría que hacer ningún cambio adicional. Ya aquí comenzamos a notar lo conciso que es Kotlin.

Metodos

Los métodos son funciones definidas dentro de nuestra clase, que nos permitirán procesar información de nuestro objeto. En Kotlin para definir un método usamos la palabra reservada fun y la definimos como una función. Por ejemplo, siguiendo nuestro ejemplo de la clase Car, queremos evaluar que si el año del vehículo es mayor o igual a 2015 lo consideraremos reciente o nuevo.

Sí, es difícil no comenzar a amar este lenguaje.

Constructores

Cuando necesitamos crear una instancia de un objeto, nos apoyamos en el método constructor de la clase, en donde definiremos los atributos iniciales de ser requeridos. En java usamos un método public con el nombre de la clase:

Constructor en Java

En Kotlin el constructor se define con la palabra reservada constructor y se define justo después del nombre de la clase. Quedando de la siguiente forma:

Constructor en Kotlin

Aquí veremos dos cosas interesantes de las clases en Kotlin: si el constructor primario (se pueden tener varios constructores) es publico se puede omitir la palabra reservada constructor del método constructor primario, y si dentro de los argumentos del constructor definimos si declaramos que sean propiedades podemos omitir las mismas dentro del cuerpo de la clase. Dejando nuestra clase de la siguiente forma:

Constructor publico y propiedades en Kotlin

Esta clase de 3 lineas en Kotlin es el equivalente su contraparte en Java de 25 Lineas.

Are you kidding me?

Constructores Secundarios

Es posible que al instancia un objeto los parámetros difieran un poco dependiendo de nuestra necesidad. Supongamos que definiremos una nueva propiedad opcional para determinar si el auto esta siendo conducido. En Java definiríamos un nuevo constructor y le agregaríamos esa propiedad:

Y al instancia en nuestro objeto en java dependiendo de los argumentos utilizara un método constructor u otro:

 
//Java
public static void main(String[] args){
     Car car = new Car(“chevrolet”, “aveo”, 2012);
     Car anotherCar = new Car(“chevrolet”, “optra”, 2011, false);
}

En Kotlin es similar pero con una sintaxis bastante interesante:

Mas de un Constructor en Kotlin

Lo primero que notaras es que definimos la propiedad isDriving y le seteamos un valor por defecto para que pueda estar definida cuando usemos el constructor primario y finalmente en el constructor secundario le pasamos las propiedades del objeto junto con las nuevas, a su vez Kotlin necesita que hagamos referencia al constructor primario de la misma clase y le pasemos los argumentos necesarios quedando de esta forma:

constructor(argumentos del constructor primario y los nuevos) : this (argumentos del constructor primario).

Como podrás observar que nuestro archivo Kotlin tiene una nueva linea de código mientras que su contraparte en Java ha crecido 5 a 6 lineas mas. Los constructores secundarios tienen su razón de ser y su correcta aplicación. No obstante, hay una tercera forma de manejar estos casos que me pareció mas limpia y elegante, la cual consiste en definir todas la propiedades en el constructor primario y asignarle un valor por defecto si al momento de instancias el objeto no es recibido. Quedando de la siguiente forma:

Kotlin is ❤

Otra cosa interesante es que podríamos modificar un poco nuestro contractor de la siguiente forma:

It’s Magic

Este post ha estado bastante extenso, pero es solo la punta del Iceberg, Kotlin ofrece muchas características interesante en la definiciones de clases. Antes de finalizar te quiero hablar de otra características de Kotlin, el método init. Al igual que en python el método init es llamado durante el proceso de crear una instancia de un objeto. Que utilidad tiene este método?. Como pudimos ver en Kotlin nuestro constructor carece de toda lógica, supongamos que estamos depurando y queremos imprimir por consola algún mensaje referente a la creación del objeto. En java hariamos los siguiente:

Metodo init en Kotlin

En ambos casos el resultado es el mismo:

Y con eso finalizamos la sintaxis básica de Kotlin en cuanto a objetos, todavía nos falta ver como Kotlin maneja las demás características de OOP como interfacez, herencia, poliformismo y demás características interesantes propias del lenguaje.

Happy Coding…