# Kotlin (lenguaje de programación)

Kotlin es un lenguaje de programación orientado a objetos multiplataforma, estáticamente tipado, de alto nivel y propósito general con inferencia de tipos. Kotlin está diseñado para ser totalmente interoperable con Java, y la versión JVM de la biblioteca estándar de Kotlin depende de la Java Class Library, pero la inferencia de tipos permite que su sintaxis sea más concisa. Kotlin se dirige principalmente a la JVM, pero también compila a JavaScript (por ejemplo, para aplicaciones web front-end que utilizan React) o código nativo a través de LLVM (por ejemplo, para aplicaciones nativas de iOS que comparten lógica de negocio con aplicaciones Android). Los costes de desarrollo del lenguaje corren a cargo de JetBrains, mientras que la Fundación Kotlin protege la marca comercial Kotlin.
El 7 de mayo de 2019, Google anunció que el lenguaje de programación Kotlin es ahora el lenguaje preferido para los desarrolladores de apps Android, y desde el lanzamiento de Android Studio 3.0 en octubre de 2017, Kotlin se ha incluido como alternativa al compilador Java estándar. El compilador Kotlin de Android produce bytecode Java 8 por defecto (que se ejecuta en cualquier JVM posterior), pero permite al programador elegir como objetivo Java 9 a 18 para su optimización, o permite más características; tiene soporte para la interoperabilidad bidireccional de clases de registro para la JVM, introducida en Java 16, considerada estable a partir de Kotlin 1.5.
Kotlin tiene soporte para la web; compilando a JavaScript (es decir, Kotlin/JS con el backend clásico, declarado estable a partir de la versión 1.3), mientras que el más nuevo Kotlin/JS (basado en lenguaje intermedio) está en beta a partir de la versión 1.5.30. Kotlin/Native (por ejemplo, para compatibilidad de Apple Silicon) está en beta desde la versión 1.3.

## Historia

En julio de 2011 JetBrains reveló el Proyecto Kotlin, un nuevo lenguaje para la JVM, el cual había estado bajo desarrollo por un año. El líder de JetBrains, Dmitry Jemerov, dijo que la mayoría de lenguajes no tienen las características que buscaban, con la excepción de Scala. Sin embargo, citó el lento tiempo de compilación de Scala como una deficiencia obvia. Uno de los objetivos establecidos de Kotlin es el de compilar tan rápido como Java.
En febrero de 2012, JetBrains liberó el código fuente del proyecto bajo la Licencia Apache 2.
En 2017, recibe un importante impulso al ser nombrado por Google como lenguaje oficial para Android al mismo nivel que Java.

## Filosofía

El líder de desarrollo Andrey Breslav ha dicho que Kotlin está diseñado para ser un lenguaje de programación orientado a objetos de calidad industrial, y para ser un lenguaje mejor que Java pero todavía ser plenamente interoperable con código Java, permitiendo a las compañías hacer una migración gradual de Java a Kotlin.

## Sintaxis

Al igual que Pascal, Haxe, PL/SQL, F#, Rust, Go y Scala —y a diferencia de C y sus derivados como C++, Java, C#, y D— la declaración de variables y listas de parámetros en Kotlin tienen el tipo de dato después del identificador y un separador de dos puntos. Igual que en otros lenguajes modernos como Scala y Groovy, los puntos y comas son opcionales como final de sentencia; en muchos casos un salto de línea es suficiente para que el compilador pueda deducir que la declaración terminó.

## Semántica

Además de clases y métodos (en Kotlin se llaman funciones miembro) clásicos de la programación orientada a objetos, Kotlin también soporta programación por procedimientos y el uso de funciones. Igual que en C y C++, el punto de entrada a un programa Kotlin es una función llamada "main", que recibe un array que contiene los argumentos pasados desde la línea de comandos. Soporta la interpolación de variables dentro de cadenas de texto al estilo de los shell scripts de Perl y Unix/Linux. La inferencia de tipos es otra de las características de Kotlin.

### Ejemplo

Kotlin hace una distinción entre tipos nullables y no-nullables (aquellos que pueden o no tener un valor nulo). Todos los objetos nullables tienen que ser declarados con un "?" sufijo después del nombre de tipo. Las operaciones con objetos nullables necesitan cuidado especial de los desarrolladores: una verificación de valor null debe ser realizado antes de utilizar el valor. Kotlin proporciona operadores seguros de nulidad para ayudar a los desarrolladores:
* ?. (Operador de navegación segura) puede ser usado para acceder de forma seguras a un método o propiedad de un posible objeto nulo. Si el objeto es nulo, el método no se invocará y la expresión evalúa a null.
* ?: (operador de coalescencia nula) a menudo referido a como el operador Elvis:
Un ejemplo del uso del operador de navegación segura:

## Herramientas

* IntelliJ IDEA tiene un plugin de soporte para Kotlin. IntelliJ IDEA 15 es la primera versión que incluye el plugin Kotlin en el Instalador IntelliJ y proporcionar soporte desde el comienzo.
* JetBrains también tiene un plugin para Eclipse.
* Plugin Apache Maven.
* Tarea para Apache Ant.
* Plugin Gradle.
* Android Studio soporta Kotlin desde la versión 3.0.
* NetBeans también incluye un plugin para Kotlin.