Kotlin: explorando uma nova linguagem ⚡️

Escrito com Gustavo Freitas

Somos dois desenvolvedores com diferentes níveis de experiência em Java. Nos últimos meses, sentimos a necessidade de explorar outras linguagens. Escolhemos Kotlin pois ficamos interessados nas promessas de poder e agilidade da linguagem.

Nos próximos parágrafos, iremos compartilhar um pouco dessa experiência de aprendizado nessa nova linguagem criada pela JetBrains.

Breve histórico

Em 2011, a JetBrains anunciou que estava escrevendo uma nova linguagem para a Java Virtual Machine (JVM). A motivação principal era melhorar a produtividade, criando uma linguagem estaticamente tipada que fosse simples o suficiente para ser aprendida facilmente. Nesse sentido, a estratégia adotada para garantir uma adoção gradual por parte dos desenvolvedores foi garantir uma interoperabilidade total com o código Java. O livro Effective Java de Joshua Bloch influenciou bastante o design da linguagem.

Durante os próximos 5 anos, a JetBrains abriu o código da linguagem e o publicou sob a licença Apache 2.0. Em fevereiro de 2016, a versão 1.0 da linguagem foi finalmente publicada.

Adoção

Talvez o que mais contribua para a rápida adoção da linguagem é a interoperabilidade com Java e o fato de Kotlin gerar bytecode compatível com a JVM. Assim, por exemplo, é possível simplesmente adicionar uma dependência ao projeto e utilizar classes Kotlin, sem a necessidade de alterar a estrutura ou ambiente onde a aplicação é executada.

Apesar de já possuirmos excelentes alternativas ao Java, como Scala ou Clojure, Kotlin oferece uma curva de aprendizado menor e compartilha vários conceitos de Scala e Java. Isso é especialmente importante para pessoas que já possuem experiência significativa com essas linguagens.

Até o momento da versão 1.0, o repositório da linguagem já havia recebido contribuições de mais de 100 desenvolvedores, haviam mais de 11 mil desenvolvedores usando a linguagem e dois livros publicados.

Em Março de 2017, após a publicação da versão 1.1 da linguagem, já haviam mais de 10 milhões de linhas de código Kotlin no Github, em 8132 repositórios. Empresas como Pinterest, Coursera, Netflix, Uber, Square, Trello e Basecamp já usam Kotlin em produção, sendo que a última divulgou que já converteu 100% de todos os seus projetos Java para Kotlin. Veja aqui um gráfico mostrando esse crescimento nos últimos anos.

Além disso, durante o evento Google I/O 2017, a Google anunciou que irá suportar Kotlin como uma linguagem de desenvolvimento oficial para Android.

Vantagens (comparação com Java)

Considerando que trabalhamos atualmente com um ecossistema em Java, acreditamos que as principais vantagens de Kotlin em relação ao Java são:

  • Conciso: basicamente todos os projetos Java possuem classes POJO, onde você precisa implementar getters, setters, equals, hashcode, etc. Bibliotecas como o Lombok provêem alternativas, porém forçam você a adicionar mais uma dependência ao projeto. Kotlin possui a definição de data class, que é basicamente o mesmo que a anotação @Data do Lombok. Kotlin remove a necessidade de casts quando é possível inferir o tipo de variável pelo contexto. Por exemplo, se uma variável do tipo Object está dentro de um if do tipo instance of String (o equivalente em Kotlin é a palavra chave is) é possível inferir que aquele objeto é do tipo String.
  • Seguro: todo mundo que já programou por mais de 1 semana em Java já passou por um NullPointerException. Muitas vezes é cansativo ficar fazendo null check, porém já vimos casos de sistemas caírem em produção por causa de um NullPointerException. Para evitar isso, Kotlin possui dois tipos de dados diferentes: objetos que podem ser nulos e objetos que não podem. Nos objetos nullable é preciso fazer null checks, já que utilizá-los antes disso pode gerar um erro de compilação. Os objetos não nullable, por sua vez, não exigem null check. É preciso lembrar que os dois tipos não são compatíveis, portanto não é possível enviar um objeto nullable como parâmetro para um método que espera um objeto não nullable.
  • Ferramentas e eco-sistema: Kotlin é mantida pela JetBrains, com isso todas as grandes ferramentas da JetBrains, como IntelliJ e TeamCity, oferecem suporte à linguagem.

Conclusão

Apesar da similaridade da sintaxe com o Java e a facilidade de conversão de códigos Java para Kotlin por meio de um plugin oficial do IntelliJ, é preciso atentar às diferenças de conceitos e de design entre as linguagens.

Para ter um melhor entendimento de Kotlin, recomendamos muito o uso dos koans que estão disponíveis no site oficial da linguagem.

Após algumas semanas programando na linguagem, os seguintes aspectos nos chamaram a atenção:

  • A existência de objetos nullable e não nullable faz com que fique claro quando um parâmetro é ou não é opcional, além de eliminar a responsabilidade de null checks de parâmetros dentro do método quando eles forem não nullable.
  • Possibilidade de adicionar métodos às classes das bibliotecas acaba com as classes helpers cheias de métodos estáticos. Chamar string.isEmpty() é mais intuitivo do que StringUtils.isEmpty(string)
  • Lambdas e referências para métodos simplificam o código, eliminando a necessidade da criação de interfaces com funções simples como callbacks
  • Kotlin ajuda a fazer uma transição gradual de orientação a objetos para programação funcional, suportando currying e functors

Em resumo, acreditamos que Kotlin é uma linguagem com potencial. Desde a versão 1.0 possui diversas funcionalidades, algumas mostradas neste artigo, e que já demonstram que a conversão de um projeto Java para Kotlin é interessante.

Como temos a JetBrains mantendo a linguagem e a utilizando efetivamente, Kotlin é uma opção sólida para você utilizar na stack do seu projeto. Caso você ainda não esteja convencido, a nossa sugestão é que você converta somente uma classe do seu projeto para Kotlin. Desse modo, você verá que a interoperabilidade é completa e você ainda pode fazer a conversão gradualmente, sem medo.

Agradecimentos a Thainara Rogério pela revisão do artigo.