Vantagens e desvantagens do Kotlin sobre o Java

Vantagens e desvantagens do Kotlin sobre o Java

Desde 7 de maio de 2019, quando o Google anunciou que o Kotlin passaria a ser a linguagem preferida para desenvolvedores de aplicativos Android, sua popularidade desde então só tem crescido. Criado pela JetBrains há pouco mais de uma década, o Kotlin ganha preferência em grande parte pela possibilidade de se criar um código menos verboso e pronto para rodar na Java Virtual Machine (JVM). Apesar da sintaxe não ser compatível com Java, ela pode interoperar facilmente com o código Java.

O Kotlin é limpo e simples - algo que os programadores amam! - e contempla menos regras em comparação com o Java e outras linguagens de programação. Tanto Java quanto Kotlin podem ser usados para criar aplicativos de alto desempenho, mas como as bibliotecas, ferramentas, documentação e recursos de aprendizado do Google têm adotado uma abordagem Kotlin em primeiro lugar, essa tem sido a linguagem escolhida por muitos desenvolvedores Android atualmente.

Neste post, passaremos pelas vantagens e desvantagens de usar Kotlin sobre Java, embora o intuito não seja comparar uma linguagem com a outra, mas aprofundar as razões que têm levado à sua popularidade crescente no mercado. Então fica a provocação: muitos desenvolvedores enfatizam que o Kotlin logo se tornará a plataforma dominante para desenvolvimento Android. Será?

Entre as razões pelas quais os desenvolvedores preferem o Kotlin sobre o Java para desenvolvimento Android estão:

Menos trabalho para a mesma tarefa

O Kotlin oferece um código muito mais simples e curto que o código Java para abordar as mesmas tarefas. Isso faz a linguagem ser bem mais legível, e também mais fácil de passar pelo debug. Em resumo, seu código é muito menor, o que agiliza o processo de programação, em comparação ao Java.

Código limpo

Programas do Kotlin dispensam o uso do ponto e vírgula, o que facilita sua leitura e compreensão, além de templates de string inteligentes. Código em linguagem concisa significa não apenas menos possibilidades de bugs como também menos chances de erros em tempo de execução e de compilação. Além disso, o Kotlin oferece uma maneira simples de usar declarações mutáveis e imutáveis para diferentes estruturas de dados.

Compatibilidade com o Java

Uma das vantagens mais poderosas do Kotlin é a compatibilidade com o Java: várias bibliotecas e frameworks Java podem ser usados em projetos Kotlin, incluindo frameworks avançados. Além disso, traduzir Java para Kotlin é fácil, basta usar um plugin no IntelliJ ou no Android Studio.

Sem null references

Uma das maiores vantagens do Kotlin sobre o Java é o null safety. O sistema de tipos do Kotlin visa eliminar o NullPointerException (NPE) do código. As únicas causas possíveis de NPEs podem ser:

  • Uma chamada explícita para throw NullPointerException()
  • Uso do operador !! que ignora o null safety
  • Inconsistência de dados relacionados à inicialização, como quando:
    Um this não inicializado disponível em um construtor é passado e usado em algum lugar (um "leaking this")
  • Um construtor de superclasse chama um membro aberto cuja implementação na classe derivada usa um estado não inicializado

Interoperação com o Java:

  • Tenta acessar um membro de uma null reference de um tipo de plataforma;
  • Tipos genéricos sendo usados para interoperação com o Java com nulabilidade incorreta; por exemplo, um pedaço de código Java pode adicionar null em um MutableList do Kotlin, exigindo um MutableList<String?> para trabalhar com ele.
  • Outros problemas causados por código Java externo.

Solução para algumas falhas do Java

Ao adotar características de outras linguagens, como C# e principalmente Scala, além de instâncias do Pascal, o Kotlin procura superar possíveis obstáculos presentes no Java. Elementos como listas de parâmetros e declarações de variáveis com o tipo de dado seguindo uma variável também podem estar presente no Kotlin. Também possui features como delegações e inicializações tardias, e aborda a segurança de tipos em listas, o que é um grande problema no Java.

Interoperabilidade com o código Java

O Kotlin é uma linguagem totalmente interoperável com Java, o que significa que alternar do Java para o Kotlin é muito fácil para desenvolvedores de aplicativos Android mais experientes. A linguagem é consistente não apenas com o Java, mas também com seus frameworks e ferramentas, como já mencionado anteriormente. E caso você já possua um aplicativo Android desenvolvido usando a linguagem Java, poderá escrever novos recursos ou simplesmente atualizar seu aplicativo Android usando o Kotlin.

Fácil manutenção

A maioria dos IDEs disponíveis no mercado atualmente oferecem suporte para o Kotlin, o que ajuda a maximizar a produtividade, já que elimina a necessidade dos desenvolvedores terem que aprender novos IDEs.

Aumenta a eficiência da equipe

Graças à sua sintaxe intuitiva e sucinta, os times de desenvolvimento podem trabalhar de forma mais eficiente usando Kotlin em comparação com Java, já que o primeiro usa menos linhas de código para construir e fazer o deploy de aplicativos Android que o segundo.

É uma linguagem testada e confiável

Apesar da pouca idade, e em comparação com o Flutter, por exemplo, o Kotlin é uma linguagem de programação já bem madura. Desde o início, em 2011, passou por vários testes Alpha e Beta antes que a JetBrains finalmente lançasse sua versão final. A JetBrains também tornou a versão mais recente do Kotlin compatível com muitas de suas versões anteriores, conferindo muito mais confiabilidade para os aplicativos Android existentes baseados em Kotlin.

Desvantagens do Kotlin sobre Java

Até aqui você pode estar pensando: “UAL, parece que o Kotlin só tem vantagens mesmo!”. Mas, calma que não é bem assim. Antes de optar pela linguagem, atente também às desvantagens do Kotlin - que não são muitas até o momento, mas existem. Então se você estiver pensando em usar o Kotlin para criar seu app Android, leve também as desvantagens em conta antes de tomar a decisão final:

Flutuação na compilação

Kotlin é mais rápido que Java em muitos cenários, como por exemplo na execução de builds incrementais. No entanto, o Java continua na frente quando se trata de criar compilações limpas para aplicativos Android.

Escassez de talentos para contratar

Apesar da crescente popularidade do Kotlin, especialmente depois que o Google o anunciou como a linguagem de programação de primeira classe para desenvolvimento de aplicativos Android, há um número ainda menor de desenvolvedores Kotlin disponíveis no mercado em comparação com desenvolvedores Java.

Recursos de aprendizagem (ainda) escassos

Da mesma forma como ainda não abundam desenvolvedores na área, também o número de recursos de aprendizagem disponíveis no mercado para aprender e dominar o Kotlin ainda são escassos. A consequência disso é o tempo extra de pesquisa necessário para descobrir como construir certos recursos no app Android usando a linguagem de programação. A boa notícia é que muitas empresas de desenvolvimento de apps Android dominam a linguagem mesmo com recursos limitados, portanto, embora seja uma desvantagem, criar um aplicativo Android com Kotlin não chega a ser exatamente um grande problema.

Kotlin não é Java

Embora hajam muitas semelhanças entre Kotlin e Java, fazer a mudança de Java para o Kotlin demanda um certo tempo de familiarização em como tudo funciona na linguagem.
Isso na prática significa que, se você tem um aplicativo Android baseado em Java e deseja migrá-lo para o Kotlin, serão necessárias despesas adicionais para treinar todo o time de desenvolvedores.

Resumindo…

Neste post, detalhamos boa parte das vantagens (que são muitas!) de usar o Kotlin para desenvolver apps Android, em contraposição às desvantagens, que realmente ainda são poucas. Em resumo:

Benefícios da linguagem Kotlin

  • Qualquer pedaço de código escrito em Kotlin é muito menor em comparação com Java, e código menor e menos verboso significa menos bugs
  • Compila o código em um bytecode que pode ser executado na JVM. Isso significa que todas as bibliotecas e frameworks desenvolvidos em Java podem ser executados em um projeto no Kotlin
  • O script do Kotlin ajuda a configurar projetos no Android Studio para fins de preenchimento automático, o que ajuda a reduzir a detecção de erros em tempo de compilação
  • É seguro contra NullPointerException (“The Billion Dollar Mistake”: o “Null” representa diferentes situações dependendo do contexto em que é usado e invocado. Como “Null” não é polimórfico com nenhum objeto, qualquer função que o invoque quebrará a cadeia de chamadas subsequentes).
  • Incorpora coroutines - feature que possibilita escrever códigos assíncronos mais facilmente e de maneira sequencial, sem usar o padrão de callback - além de interoperabilidade com Javascript para desenvolvimento web

Desafios da linguagem Kotlin

  • Corresponde a padrões fracos, com legibilidade do código um pouco difícil de ler e entender inicialmente
  • Comunidade de suporte ainda é pequena, quando comparada ao Java. Por conta disso, possui menos bibliotecas e tutoriais disponíveis
  • Apresenta uma curva de aprendizado bastante íngreme, o que pode afetar sua adoção por parte de times em busca de sua sintaxe concisa
  • Existem (ainda) poucos desenvolvedores disponíveis no mercado

E você, prefere Java ou Kotlin para apps Android? Conta pra gente nos comentários!