2. AGENDA
⇢ Motivação criação Kotlin
⇢ Utilização dentro do Mercado Livre
⇢ Kotlin vantagens e desvantagens
⇢ Features
3. A JetBrains (empresa criadora das famosas IDE``s como: IntelliJ, WebStorm, Goland, DataGrip, etc...)
estava atrás de uma linguagem mais produtiva, funcional e menos verbosa, características que Java
não possuia, o foco dessa procura era melhorar os aspectos de desenvolvimento de software das
ferramentas que desenvolvia, que eram todas feitas em Java, no ocorrido uma das soluções pensadas
e testadas foi Scala, que também roda sobre a JVM, mas Scala acabou sendo descartada porque sua
performance do aspecto compilação se tornou um impeditivo. Então em 2011 a JetBrains criou Kotlin
para resolver esse problemas, Kotlin então se tornou público e open em 2012 e teve sua primera
versão fechada (v 1.0) em 2016.
Atualmente Kotlin é mantido por um conjunto de empresas, como JetBrains, Google, Netflix etc, esse
grupo é chamado de Kotlin Fundation.
MOTIVAÇÃO
CRIAÇÃOKOTLIN
4. UTILIZAÇÃO DENTRO
DO MERCADO LIVRE
Além de grande uso em Android, dentro do Mercado Livre existem inúmeras iniciativas
utilizando Kotlin no desenvolvimento backend, em várias verticais de negócio como
Mercado Envios, Seller Invoice, Mercado Shops entre outras, são quase 200 projetos em
Kotlin e 100 aplicações e serviços em produção.
Vemos também um crescimento exponencial de novas aplicações sendo feitas em Kotlin.
5. IMPORTANTE
!
Para essa comparação foi utilizado Kotlin na sua última versão
oficial - 1.4 e Java na sua última versão LTS - 11
Set/2020
6. VANTAGENSKOTLIN
Apoiado e mantido por grandes empresas (Jetbrains, Google, Uber, Netflix etc)
Constantemente atualizado
Curva de aprendizado muito baixa para devs Java
Sintaxe simples, concisa e pouco verbosa
Interoperabilidade total com Java
Múltiplos Paradigmas (Funcional, OO)
Foco Imutabilidade
Features
Coroutines
Data Class
Default e Named Parameters
Delegations
Destructuring Declarations
Elvis Operator
Extension Function
Infix Function
Lazy Initialization
Null Safety por padrão
One Line Function
Receiver Function
Scope Function
Sealed Class
Smart Cast
Operator overloading
Template String
Type Alias
7. DESVANTAGENSKOTLIN
Foco muito grande em Android
A comunidade de JAVA é maior que a de Kotlin, sendo assim há mais material disponível para JAVA
Kotlin não possuí operador ternário
Velocidade de compilação inferior ao de JAVA
Existem muitos desenvolvedores Kotlin no mercado, porém poucos especialistas
Não possuí tipos primitivos
Não possui membros estáticos
8. Código Java
Código de exemplo Kotlin que chama o código Java
FEATURE
INTEROPERABILIDADE
TOTAL COM JAVA
Uma das melhores características da
linguagem de programação Kotlin é sua
total interoperabilidade com Java, que
atrai mais desenvolvedores de Java
para aprender Kotlin e também sua
baixa curva de aprendizado para
desenvolvedores Java. Com essa total
interoperabilidade conseguimos usar
todas as ferramentas, frameworks e
utilitários feitos em Java.
Obs.: Isso pode ser visto em mais detalhes aqui.
9. Código de exemplo Kotlin
FEATURE
NULL SAFETY POR
PADRÃO
O sistema de tipos da linguagem Kotlin
visa eliminar os perigos de referências
nulas do código, que é frequentemente
chamado de erro de bilhão de dólares.
Por exemplo, em Java, o acesso a um
membro de referência nula resulta em
uma exceção de referência nula, já no
Go um panic. Kotlin não compila código
que atribui ou retorna um nulo. Isso é
visto como uma das características
mais importantes do Kotlin.
Obs.: Isso pode ser visto em mais detalhes aqui.
Não existe código Java equivalente para isso.
10. Código Kotlin
FEATURE
ELVIS OPERATOR
Com Elvis Operator podemos trabalhar
com variáveis nulas de maneira muito
mais eficiente, também deixando o
código muito mais limpo e legível.
Obs.: Isso pode ser visto em mais detalhes aqui.
Não existe essa feature no Java, mas no próximo slide podemos ver um código equivalente com IFs.
11. FEATURE
Código equivalente emJava
ELVIS OPERATOR
Com Elvis Operator podemos trabalhar
com variáveis nulas de maneira muito
mais eficiente, também deixando o
código muito mais limpo e legível.
12. FEATURE
Código Kotlin
Código de exemplo Java equivalente
TEMPLATE STRING
As String em Kotlin podem conter
expressões de modelo. A expressão de
modelo é um pedaço de código que é
avaliado e seu resultado é concatenado
em string. Começa com um cifrão $ e
consiste em um nome de variável, caso
queira executar algo dentro disso é só
adicionar ${logica}
Obs.: Isso pode ser visto em mais detalhes aqui.
13. FEATURE
Código Kotlin
EXTENSION FUNCTION
Graças às funções de extensão do
Kotlin, você pode adicionar funções às
classes já existentes, sem fazer
alterações diretamente em seu código
fonte. Embora as funções de extensão
sejam frequentemente criticadas, as
vezes é muito útil. Isso nos permite
resolver um método / propriedade
estático em um objeto / classe que já
existe. Ou seja, chamamos o objeto
como se tivesse chamando o método
ou classe de origem.
Obs.: Isso pode ser visto em mais detalhes aqui.
Não existe código Java equivalente para isso.
14. FEATURE
Código Kotlin
Código de exemplo Java equivalente
DATA CLASS
O escopo do recurso e a necessidade
de uma classe são sempre discutidos
pelos designers de linguagem de
programação. Uma classe de dados
típica em Java tem toneladas de código
padrão que é necessário pular
enquanto descobre o uso real dessa
classe. No entanto, no Kotlin, você
pode escrever o equivalente do mesmo
código Java de uma maneira muito
simples e economizar toneladas de
digitação e esforço mental.
Obs.: Isso pode ser visto em mais detalhes aqui.
15. FEATURE
Código Kotlin
Código de exemplo Java equivalente
DEFAULT PARAMETER
Os parâmetros padrão no Kotlin são
bastante úteis quando você passa os
argumentos por nome, em vez de
índice.
Outra grande vantagem também
quando é necessário adicionar um
parâmetro em uma função já existente
e não gostaríamos de quebrar quem já
utiliza essa função.
Obs.: Isso pode ser visto em mais detalhes aqui.
16. FEATURE
Código Kotlin
NAMED PARAMETER
Parâmetros padrões se tornam mais
poderosos em combinação com
parâmetros nomeados.
Também melhoram a leitura do código
de quem está chamando a função.
Obs.: Isso pode ser visto em mais detalhes aqui.
Não existe código Java equivalente para isso.
17. FEATURE
Código Kotlin
DELEGATION
O padrão Delegation provou ser uma
boa alternativa à herança de
implementação, e o Kotlin o suporta
nativamente, exigindo zero código
padrão, isso é muito útil em casos de
uso, qual usamos uma estrutura de
camada onde Endpoint > Service > Dão
e normalmente em alguns métodos o
service apenas delega a chamada para
o Dao, porque o mesmo não possui
nenhuma lógica.
Obs.: Isso pode ser visto em mais detalhes aqui.
Código de exemplo Java equivalente
18. FEATURE
Código Kotlin
Código de exemplo Java equivalente
LAMBDAS
Expressões lambda e funções
anônimas são 'literais de função', isto é,
funções que não são declaradas, mas
são transmitidas imediatamente como
expressão.
Kotlin é considerado por muitos uma
linguagem com uma sintaxe lambda
muito intuitiva e concisa.
Obs.: Isso pode ser visto em mais detalhes aqui.
19. FEATURE
Código Kotlin
Código de exemplo Java equivalente
SMART CAST
Há duas formas de fazer casting de
valores de variáveis em Kotlin:
explicitamente e de forma automática.
O compilador Kotlin buca a palavra
reservada "is" e identifica valores
imutáveis para fazer o casting
automaticamente.
Obs.: Isso pode ser visto em mais detalhes aqui.
20. FEATURE
Código Kotlin
ONE LINE FUNCTIONS
Normalmente, uma função deve
declarar seu tipo de retorno; uma
exceção existe apenas para funções
que consistem em uma única
expressão. Freqüentemente, são
chamadas de funções de one line ou de
single line.
Essas funções podem usar uma sintaxe
abreviada que omite as chaves e usa o
= símbolo antes da expressão em vez
da return.
Esse recurso deixa o código bastante
legível.
Obs.: Isso pode ser visto em mais detalhes aqui.
Não existe código Java equivalente para isso.
21. FEATURE
Código Kotlin
SCOPE FUNCTION
A biblioteca padrão Kotlin contém
várias funções cujo único objetivo é
executar um bloco de código no
contexto de um objeto. Quando você
chama essa função em um objeto com
uma expressão lambda fornecida, ela
forma um escopo temporário. Nesse
escopo, você pode acessar o objeto
sem seu nome. Tais funções são
chamadas de funções de escopo . Há
vários deles, como: let, run, with, apply,
e also.
Basicamente, essas funções fazem o
mesmo: execute um bloco de código
em um objeto. O que é diferente é
como esse objeto fica disponível
dentro do bloco e qual é o resultado de
toda a expressão.
Obs.: Isso pode ser visto em mais detalhes aqui.
Não existe código Java equivalente para isso.
22. FEATURE
Código Kotlin Código de exemplo Java equivalente
EXPRESSÃO WHEN
A expressão when substitui o famoso
switch operator de linguagens
baseadas em C. when checa o
argumento de entrada contra todas as
opções sequencialmente até que
alguma seja verdadeira. when pode ser
usado ou como uma expressão ou
como uma declaração.
A opção else é executada se nenhuma
das outras opções são verdadeiras. Se
when é utilizado como uma expressão,
a opção else é obrigatório, a não ser
que o compilador tenha certeza que
todos os casos estão cobertos pela
opção (como por exemplo com um
enum)
Obs.: Isso pode ser visto em mais detalhes aqui.
23. FEATURE
Código Kotlin Código de exemplo Java equivalente
LAZY INITIALIZATION
Às vezes, precisamos construir
objetos que tenham um processo de
inicialização complicado. Além disso,
muitas vezes não podemos ter
certeza de que o objeto pelo qual
pagamos o custo da inicialização no
início de nosso programa será usado
em nosso programa.
Pensando nisso a equipe do Kotlin
desenvolveu o conceito de
"inicialização lenta" para impedir a
inicialização desnecessária de objetos.
Essa feature faz parte de um conjunto
de features chamadas Delegated
Properties.
Obs.: Isso pode ser visto em mais detalhes aqui.
24. FEATURE
Código Kotlin
ESPAÇOS EM NOMES
DE FUNÇÕES
Em Kotlin temos a possibilidade de
escrever os nomes das funções de
qualquer forma desde que esteja
dentro de crases, isso é muito utilizado
no escopo de teste.
Obs.: Isso pode ser visto em mais detalhes aqui.
Não existe código Java equivalente para isso.
25. FEATURE
Código Kotlin
INFIX FUNCTIONS
Devem ser métodos ou extension
functions;
Devem conter apenas um único
parâmetro;
O parâmetro não pode ser um
vararg and não pode conter um
default value;
Funções marcadas com o keyword
infix também podem ser chamadas
usando a notação infix (omitindo o
ponto e os parênteses na chamada).
Funções infix devem satisfazer os
seguintes requerimentos:
Obs.: Isso pode ser visto em mais detalhes aqui.
Não existe código Java equivalente para isso.
26. FEATURE
Código Kotlin
Código de exemplo Java equivalente
TYPE ALIAS
Há casos em que precisamos criar
nomes alternativos para tipos já
existentes. Isso pode acontecer caso o
nome é muito grande e vamos utilizar
muito durante nossa implementação,
por exemplo. Kotlin permite criar alias
para tipos utilizando a palavra chave
typealias.
Obs.: Isso pode ser visto em mais detalhes aqui.
27. FEATURE
Código Kotlin
SEALED CLASSES
Classes seladas são usadas para
representar hierarquias de classe
restritas, quando um valor pode ter um
dos tipos de um conjunto limitado, mas
não pode ter nenhum outro tipo. Elas
são, de certa forma, uma extensão de
classes de enum: o conjunto de valores
para um tipo de enum também é
restrito, mas cada constante de enum
existe apenas como uma única
instância, enquanto uma subclasse de
uma classe selada pode ter várias
instâncias que podem conter Estado.
Obs.: Isso pode ser visto em mais detalhes aqui.
28. FEATURE Código de exemplo Java equivalente
SEALED CLASSES
Classes seladas são usadas para
representar hierarquias de classe
restritas, quando um valor pode ter um
dos tipos de um conjunto limitado, mas
não pode ter nenhum outro tipo. Elas
são, de certa forma, uma extensão de
classes de enum: o conjunto de valores
para um tipo de enum também é
restrito, mas cada constante de enum
existe apenas como uma única
instância, enquanto uma subclasse de
uma classe selada pode ter várias
instâncias que podem conter Estado.
30. LINKS
IMPORTANTES
Guia de desenvolvimento e boas praticas de Kotlin backend - Usado pela iniciativa Mercado Envios/FOS
Automation e Mercado Envios/YMS
Projeto de exemplo referência em Kotlin no Fury
Grupo de estudos Kotlin - Vídeos e códigos do grupo de estudos Kotlin
Guia de motivação para o uso de Kotlin - Esse documento foi usado para justificar o uso de Kotlin no
backend das aplicações do time YMS e UCS
Coding Conventions - Convenção de código Kotlin da própria linguagem
Post - Idiomatic Kotlin, Best Practices - Um post sobre boas práticas de Kotlin
Effective Kotlin - Livro sobre boas práticas em Kotlin
Projeto de exemplo Kotlin Rest (Kotlin v.1.2)
Projeto de exemplo Kotlin GraphQL (Kotlin v.1.2)
Exemplo de um problema resolvido em Kotlin, Java e Golang
Acessívelsomentea
membrosdoMercadoLivre