Vamos a ver una colección de modismos que se utilizan con frecuencia.

Crear DTOs (POJOs/POCOs)

Con esa sola línea obtendríamos:

  • getters (y setters en caso de utilizar var) de todas las propiedades
  • equals()
  • hashCode()
  • toString()
  • copy()
  • component1(), component2(), …, para todas las propiedades (Ver Clases de Datos)

Valores por defecto de los parámetros de una función

Filtrar una lista

O una alternativa incluso más corta utilizando it:

Interpolación de textos

Controles de instancia

Recorrer un mapa/lista de pares

Alternativamente también podríamos hacerlo así:

Intervalos

Como puedes ver, he utilizado .also para que una vez que se haya mostrado la lista se limpie a posteriori. Observa también que aunque la lista es val, es decir, no podrás hacer lista = otraList pero si podrás modificar sus parámetros ya que es una MutableList.

Listas

Con .apply podemos utilizar varias funciones sobre el mismo objeto sin tener que escribirlo con cada función. Es muy útil cuando ya que además de ahorrarte código duplicado facilita su lectura.

Mapas

Como hemos dicho antes, en Kotlin puedes utilizar las variantes mutables de ciertas interfaces. Como ejemplo, las listas o los mapas tienen su variante mutable,

Como puedes ver, aunque utilizamos val podemos modificar los valores de cada clave. Si añadiésemos un nuevo valor también funcionaría:

Sin embargo si tratásemos de igualar mapa a otro mapa diferente, no podríamos compilar:

Atributo tardío (Lazy)

Cuando utilizas by lazy lo que haces es que la variable no se inicie en el momento en el que la declaras. Se inicia en el momento en el que se usa.

Funciones de extensión

Esta es una de las características que más me gustan de Kotlin. Puedes añadir comportamientos o funcionalidades nuevas a cualquier clase. Por ejemplo vamos a añadir a String una función que invierta la cadena de texto que le pasemos.

Un ejemplo de esto aplicado a Android sería crear una función para añadir una nueva funcionalidad a un ImageView: Descargar imágenes de Internet con Picasso o Glide.

He creado un repositorio en GitHub con una recopilación de estas funciones. Puedes sugerirme más mediante pull requests/issues o dejando un comentario en esta entrada para añadir más.

Crear un Singleton

También es posible crear un objeto anónimo:

Abreviación de “si no es nulo”

Imagina que tratas de obtener una lista de objetos de una API, y por algún motivo no puede obtener la lista, obteniendo una lista null, para evitar un error simplemente utilizaríamos ? de esta forma:

Abreviación de “si no es nulo entonces”

También conocido como Elvis operator por su forma ?:

Obtener el primer ítem de una lista que puede estar vacía

Ejecutar si no es nulo

En el siguiente caso como la lista será nula, no imprimirá el texto, pero tampoco obtendremos una excepción. Esto es realmente útil en Android ya que muchas veces tenemos ciertos elementos que nunca sabemos si son nulos o no como el contexto en un fragmento. Con un símbolo de interrogación evitamos tener que colocar el clásico if (elemento != null) ...

Abreviación de “devolver cuando (when)”

Expresión ‘try/catch’

Expresión ‘if’

Uso de métodos de estilo constructor

Funciones de expresión única

La siguiente función:

Es equivalente a:

Estas funciones pueden ser combinadas con otros modismos, por ejemplo con un when

Utilizar múltiples métodos de una instancia de objeto con ‘with’

Para evitar tener que escribir varias veces el mismo código y evitar duplicados, puedes utilizar todos los métodos de un objeto gracias a with:

Menú