Imaginem um mundo muito estranho chamado “A JVM”.
(A partir deste momento, o melhor é ler com a voz de David Attenborough).
No início, existia uma única criatura. O seu nome era Java. A Java era divertida, nova, simples, poderosa… mas a Java não era suficiente. Outras espécies surgiram, tais como: Ceylon, Groovy, Scala, Clojure, Frege, Kotlin. Até a Java evoluiu com o tempo! Mas porquê tantas espécies? – é uma questão que vos pode surgir. Será que o Criador falhou na sua própria criação? Estariam os outros deuses (os programadores) descontentes? Talvez não estivessem felizes o suficiente… Quem sabe?
Então… Este é o caso de Kotlin.
Mas chega de analogias a A Vida na Terra. Ainda assim, podem continuar a ler com a voz do David Attenborough, todos sabemos o quão incrível é.
Ainda assim, a questão que se coloca é: mas porquê outra linguagem de programação para JVM? A isso não posso responder, porque não sei. No entanto, acredito ter alguns argumentos que possam ajudar a explicar porque é que Kotlin é um espécimen muito forte.
A Evolução de Kotlin
Embora pareça, a linguagem Kotlin não é totalmente nova. A sua primeira aparição aconteceu no dia 8 de novembro de 2010 e, desde então, tem amadurecido com o tempo, tal como um bom Whiskey.
A adoção desta linguagem tem aumentado significativamente ao longo dos últimos meses, impulsionada pela referência em grandes eventos, como o Spring Framework 5.0 ou o Google I/O 2017, no qual a Google anunciou o seu apoio oficial a Kotlin para a plataforma de Android. 2017 foi também o ano da primeira KotlinConf, na qual ficou claro que as potencialidades de Kotlin vão muito para além do mundo Android.
É curioso ver o número de questões relacionadas com Kotlin a aumentar no StackOverflow, depois do anúncio feito pela Google e pelo facto de agora aparecer no TIOBE Index.
Quanto aos projetos open source no GitHub – segundo o GitHut 2.0 – num ranking de 50, Kotlin pontua da seguinte forma:
- 16º lugar para project stars, num total de 0.480%;
- 17º lugar para issues, com um total de 0.489%;
- 23º lugar nos pull requests, perfazendo um total de 0.351%;
- 19º lugar para pushes, totalizando 0.424%.
Verifica-se que o crescimento, no geral, é bastante positivo.
Interoperabilidade com Java
Kotlin destaca-se em relação a outras linguagens de programação principalmente pela sua abilidade de interoperar de forma simples com Java no runtime JVM.
Esta linguagem tem também possibilidade de compilação para Java Bytecode e adiciona praticamente zero overhead, sendo possível compilar para versões 6, 7, 8 e 9 de Java Bytecode e, ao mesmo tempo, tentar extrair vantagens das características de cada versão. Um bom exemplo do poder de Kotlin é o suporte que dá às expressões Lambda, mesmo quando compiladas para Java Bytecode 6.
Tooling
Kotlin foi desenvolvida pela empresa JetBrains, que acabou por torná-la numa linguagem first-class citizen no IntelliJ IDE, Android Studio e CLion. Inclui features como refactoring, geração de código, code completion, compilação para bytecode e sneak-peeking ao bytecode on the fly, e, até mesmo, um conversor de Java para Kotlin. Tudo ao vosso dispor.
O compilador (kotlinc) tem um modo REPL que pode ser utilizado para testar facilmente alguns snippets de Kotlin the forma interactiva.
Targets Multiplataforma
Utilizando Kotlin é possível compilar para JVM, Javascript e LLVM.
Vou reformular a frase para que percebam o meu ponto:
“Programar em Kotlin e obter o código server-side para distribuir em JBoss, partilhar código referente à camada de lógica aplicacional com a aplicação Android, e, ainda, com a webapp JS/HTML. Oh! E não vamos esquecer aquele device de IoT, vamos partilhar algum código com ele também. Como assim? Também partilhar a lógica com a aplicação iOS? Claro, porque não!”
Kotlin/ Native tiram partido de LLVM de forma a facilitar o suporte de forma nativa de um vasto número de plataformas como Windows, Linux, OSX, iOS, Android e WebAssembly.
Kotlin para JavaScript permite a transpilação de Kotlin para linguagem JavaScript, tornando possível, por exemplo, a criação de web apps de React.
Um ótimo showcase destas características é a aplicação da KotlinConf 2017, que foi inteiramente implementada com recurso a Kotlin, desde o backend, ao frontend e aplicações móveis.
Aceitar Kotlin como uma equipa
Começar a utilizar Kotlin não tem de ser uma decisão arriscada! Por natureza, Kotlin funciona incrivelmente bem com o código Java existente e é até possível ter código Kotlin e Java no mesmo projeto. Desenvolver novas características em Kotlin num projeto existente pode ser uma excelente abordagem para proceder à adoção com um risco mínimo, já que não existe a necessidade de começar tudo de novo por causa de uma nova linguagem ou tecnologia.
Utilizar Kotlin tornou-se numa realidade diária para os Android developers. A maioria dos GDEs (Google Developer Experts) defende e utiliza Kotlin diariamente e pode ser encontrada bastante informação sobre esta linguagem na documentação oficial de Android.
Para os developers fora do universo mobile, por exemplo, os backend developers, Kotlin apresenta-se, não só como uma forma de alcançar os padrões standard de atuais linguagens de programação na JVM, mas também como um substituto para a linguagem Java na sua totalidade. Projetos como o TornadoFX, Ktor, Spring, entre muitos outros, oferecem as bases necessáras para que a linguagem Kotlin possa triunfar fora do domínio mobile. E uma vez que Kotlin é praticamente 100% interoperável com Java, os programadores podem continuar a utilizar as mesmas frameworks às quais já estão habituados mas com a felicidade que a sintaxe de Kotlin oferece!
As abordagens mais comuns para a adoção de Kotlin são:
- Reescrever os testes de unidade Java com Kotlin. Muitos concordam que esta é uma ótima abordagem para começar a mexer em Kotlin, sem colocar em risco o código que vai para produção. Kotlin oferece alguns truques que permitem tornar os unit-tests mais legíveis e compactos.
- Quando projetar novas características, em vez de utilizar Java, recorra a Kotlin!
- Se o projeto em que está a trabalhar se deve a um refactor, aplique Kotlin à nova versão reescrita do código base.
- Entregue-se totalmente a Kotlin e deixe para trás os dias tristes dizendo adeus a Java!
Linguagem Kotlin
Esta linguagem, em si, é maravilhosa. Kotlin é uma linguagem fortemente tipada, e que tem como principais objetivos ser concisa e legível.
Esta tenta também resolver um dos principais objetivos no mundo Java: NullPointerException. Torna a nulabilidade parte do sistema e força os developers a pensarem explicitamente sobre os seus impactos.
Outro aspeto que torna Kotlin uma linguagem extraordinária é o facto de permitir que os autores possam transportar as melhores carateríticas de outras linguagens para Kotlin. Para nomear algumas:
- Extension Functions
- Destructuring declarations
- High Order Functions
- Type Inference
- Functional Facilities (map, filter, flatmap, etc)
- Custom DSLs
- Named parameters
- Pattern Matching
- Operator Overload
Sintaxe de Kotlin
Aqui ficam alguns trechos de código Kotlin. Um pequeno sneak peek. Estes tentam mostrar quão simples é a linguagem Kotlin, quando comparada a Java.
Java | Kotlin |
// Class definition class Person { private String name; private int age; public String getName(){ return name; public int getAge(){ public Person(String name, int age) { public String greet(){ |
// Class definition class Person(val name:String, val age:Int) { public fun greet():String { return “Hi $name, how are you doing?” } } |
// A Typical unsafe Java Singleton public class Singleton { private static Singleton instance = null; private String someProperty = “SOME_SINGLETON”; private Singleton() { } public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } public String getSomeProperty() { return someProperty; } public String appendSomethingToProperty(String something) { return someProperty + something; } } |
// A simple Kotlin Singleton object Singleton { val someProperty:String = “SOME_SINGLETON” fun appendSomethingToProperty(something:String) = someProperty + something } |
O que se segue?
Se, através deste texto, consegui influenciar-vos a testar Kotlin, aqui ficam alguns locais onde podem experimentar e que servem como apoio:
- Kotlin koans são uma série de pequenos desafios online e são uma ótima forma de começar a explorar a superfície desta linguagem;
- Kotlinlang.org;
- Kotlin for Android Developers é um livro de Antonio Leiva, e é uma excelente fonte de informação tanto sobre Kotlin como sobre Android em geral;
- Kotlin in Action é outro livro, de Dimitry Jemerov e Svetlana Isakova, muito bom para que os Java developers possam crescer na linguagem Kotlin;
- Kotlin for Java Developers é uma webtalk de Venkat Subramanian, e é um ótimo primer para Kotlin;
- Kotlin Puzzlers de Anton Keks é uma viagem aos aspetos não tão fáceis de Kotlin.