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
: