# Kotlin

Kotlin é uma linguagem de programação multiplataforma, orientada a objetos e funcional, concisa e estaticamente tipada (variáveis com tipos específicos), desenvolvida em 2011 pela empresa tcheca JetBrains, que compila para a Máquina virtual Java (JVM) e também traduzida para a linguagem JavaScript e compilada para código nativo (via LLVM). Foi anunciada em 2017 pela Google como uma linguagem de desenvolvimento oficial do Android.
A versão da JVM (Java Virtual Machine) de sua biblioteca padrão depende da Java Class Library, mas a inferência de tipos permite que sua sintaxe seja mais concisa. Apesar de possuir uma sintaxe mais concisa e um pouco diferente da linguagem Java, Kotlin é projetada para ter uma interoperabilidade total com código Java, agilizando assim a sua adoção.
Foi considerada pelo público a 2ª linguagem "mais amada", de acordo com uma pesquisa conduzida pelo site Stack Overflow em 2018.

## Etimologia

Desenvolvida pela JetBrains, o termo "kotlin" é baseado no nome da ilha de Kotlin (em russo: Котлин), onde situa-se a cidade russa de Kronstadt, próximo a São Petersburgo.

## História

Em julho de 2011 a JetBrains revelou o Projeto Kotlin, no qual já estava trabalhando havia um ano. Dmitry Jemerov disse que a maioria das linguagens não possuíam as características que eles da empresa procuravam, com exceção da linguagem Scala, no entanto, Dmitry Jemerov citou que o tempo de compilação do Scala era lento, sendo uma deficiência óbvia. Um dos objetivos declarados da Kotlin é compilar tão rápido quanto Java. Em Fevereiro de 2012, a JetBrains abriu o projeto Kotlin sob a Licença Apache de Código aberto. A JetBrains disse acreditar que a sua nova linguagem irá dirigir as vendas da IntelliJ IDEA.
Kotlin v1.0 foi lançada em 15 de fevereiro de 2016. Este é considerado o primeiro lançamento oficialmente estável e a JetBrains comprometeu-se com a compatibilidade com versões anteriores a partir desta versão.
No Google I/O 2017, o Google anunciou que o Kotlin é oficialmente suportado pela Google para desenvolvimento móvel no Android. Desde o lançamento do Android Studio 3.0 em outubro de 2017, o Kotlin é incluído como uma alternativa ao compilador Java padrão. O compilador Kotlin do Android permite que o usuário escolha entre o código de bytes compatível com Java 6 ou Java 8.
Kotlin v1.3 foi lançada em 29 de outubro de 2018, trazendo coroutines para programação assíncrona.
Em 7 de maio de 2019, Google anunciou que agora o Kotlin é a linguagem principal para desenvolvedores de aplicativo Android.

## Filosofia

O líder de desenvolvimento, Andrey Breslav, disse que Kotlin é projetada para ser uma linguagem orientada a objeto de uso industrial, e que Kotlin deve ser uma linguagem melhor do que Java, mas ainda ser totalmente interoperável com código Java, permitindo que as empresas possam fazer uma migração gradual de Java para Kotlin.

## Design

Os ponto-e-vírgulas são opcionais como um terminador de instrução; na maioria dos casos, uma nova linha é suficiente para o compilador deduzir que a instrução terminou.
Declarações de variáveis ​​do Kotlin e listas de parâmetros têm o tipo de dados vindo depois do nome da variável (e com um separador de dois-pontos), semelhante ao Pascal.
Variáveis ​​no Kotlin podem ser imutáveis, declaradas com a palavra-chave val, ou mutáveis, declaradas com a palavra-chave var.
Os membros da classe são públicos por padrão e as próprias classes são finais por padrão, o que significa que a criação de uma classe derivada é desativada, a menos que a classe base seja declarada com a palavra-chave aberta.
Além das classes e métodos (chamadas de funções-membro em Kotlin) de programação orientada a objetos, Kotlin também suporta programação procedural com o uso de funções.
As funções e construtores da linguagem suportam argumentos padrão, listas de argumentos de tamanho variável, argumentos nomeados e sobrecarga por assinatura única.

## DSL

O Kotlin DSL, é uma "Linguagem de Domínio Específico" (do inglês "Domain-Specific Language", DSL) ou "linguagem de programação de propósito especial", serve para criar linguagens específicas para um domínio específico usando a linguagem Kotlin; desenvolvedores criam uma sintaxe intuitiva para resolver problemas específicos em suas aplicações, tornando o código mais legível e de fácil entendimento. Ou seja, esse tipo de linguagem é criada para resolver problemas em um domínio particular (não resolve problemas fora de seu âmbito de atuação). Popularmente usada em projeto com configuração complexa e em projeto com interação rica através de API (conjunto de funções implementadas em um programa de computador que podem ser usadas por outros programas).

### Vantagens

As vantagens do uso do Kotlin DSL traz são: maior legibilidade do código; redução de erros; facilitação da colaboração entre equipes e, maior produtividade. Com sintaxe mais clara, os desenvolvedores podem entender rapidamente o objetivo de cada parte do código, bem útil em projetos complexos. E os desenvolvedores concentran-se em resolver problemas específicos sem preocupar-se com a complexidade da linguagem.

### Exemplos

Um exemplo clássico de uso do Kotlin DSL é criar bibliotecas de construção de interfaces, como o Anko, para a criação de layouts de modo intuitivo. Outro exemplo é o uso em framework de teste, com sintaxe adaptada para descrever teste de maneira mais clara. O exemplo mais conhecido é o Gradle, ferramenta de automação de compilação, que usa Kotlin DSL que ajuda os desenvolvedores escrevam scripts de construção de forma expressiva.

## Multiplataforma

O frameworks cross-platform "Kotlin Multiplataforma" (KMP) usado para desenvolvimento de aplicações para o sistema Android, iOS e, Desktop usando o mesmo código e mesma IDE através da técnica de compilação cruzada; onde o código Kotlin é compilado para diferentes sistema operacionais ao mesmo tempo com os benefícios da programação nativa (aplicações cross-platform e multiplatform).
Em novembro de 2023 foi liberado a primeira atualização estável do KMP, unificando o código base que implementa: networking, armazenamento, validações, computações, e outras lógicas da aplicação. O KMP também fornece uma biblioteca de código nativo para cada sistema de destino, que contém funções e classes que são compiladas pelo kotlin.

## Aplicações

Uma das aplicações óbvias do Kotlin é o desenvolvimento do Android. A plataforma ficou "presa" no Java 7 por um tempo (com alguns recursos de linguagem contemporâneos acessíveis através do uso de Retrolambda ou da Jack Toolchain) e Kotlin introduz muitos aprimoramentos para programadores como segurança de ponteiro nulo, funções de extensão e notação infixa.
Acompanhado de compatibilidade total com Java e bom suporte a IDE (Android Studio), ele visa melhorar a legibilidade do código, oferecer uma maneira mais fácil de estender as classes do Android SDK e acelerar o desenvolvimento.
O Kotlin foi anunciado como uma linguagem de desenvolvimento oficial para Android no Google I/O 2017, tornando-se a terceira linguagem totalmente suportada para Android, além de Java e C++.

## Uso por outros desenvolvedores

De acordo com o site da Kotlin, Prezi está usando o Kotlin no backend. DripStat fez um writeup de sua experiência com Kotlin. De acordo com o blog da JetBrains, o Kotlin é usado pela Amazon Web Services, pelo Coursera, pela Netflix, pelo Uber, pelo Trello, pelo Basecamp e outros. Segundo o Google, o Kotlin já foi adotado por vários grandes desenvolvedores - Expedia, Flipboard, Pinterest, Square e outros - em seus aplicativos de produção para Android.

## Exemplos
### Algoritmo de Trabb Pardo-Knuth

O algoritmo TPK é um programa computacional introduzido por Donald Knuth e Luis Trabb Pardo que ilustra a evolução das linguagens de programação.

### Jetpack Compose

Jetpack Compose é uma estrutura de interface gráfica da aplicação (framework UI) de código aberto desenvolvida pelo Google, com primeira prévia anunciada em maio de 2019. O compose é compatível com a versão Android 5.0 e posteriores, com suporte para Material Design 3. Possui um modelo de programação de UI reativo semelhante ao Vue.js e React Native.
Exemplo de programa "Olá Mundo" usando o Jetpack Compose: