SlideShare a Scribd company logo
1 of 31
Download to read offline
AGENDA
⇢ Motivação criação Kotlin
⇢ Utilização dentro do Mercado Livre
⇢ Kotlin vantagens e desvantagens
⇢ Features
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
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.
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
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
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Operator overloading
Coroutines
Destructuring Declarations
Kotlin Test
Returns and Jumps
Generics
Object Expressions
Inline Classes
Inline Functions
Ranges and Progressions
Type-Safe Builders e DSLs
Function Receiver
Equality
OUTRAS
FEATURES
A SEREM
ESTUDADAS
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
Acesse: https://gist.github.com/justiandre/6b478e9647be921b302f1c55d6146e63
Site
Linkedin: in/andrejusti
GitHub: justiandre
SlideShare: justiandre
E-mails
Pessoal: justi.andre@gmail.com
Meli: andre.justi@mercadolivre.com
ANDRÉ JUSTI
Obrigado

More Related Content

What's hot

CI/CT/CD and Role of Quality Engineering
CI/CT/CD and Role of Quality EngineeringCI/CT/CD and Role of Quality Engineering
CI/CT/CD and Role of Quality EngineeringSushma
 
Introduction to Behaviour Driven Development (BDD) and Cucumber with Java
Introduction to Behaviour Driven Development (BDD) and Cucumber with JavaIntroduction to Behaviour Driven Development (BDD) and Cucumber with Java
Introduction to Behaviour Driven Development (BDD) and Cucumber with JavaJawad Khan
 
How Texas Instruments Uses InfluxDB to Uphold Product Standards and to Improv...
How Texas Instruments Uses InfluxDB to Uphold Product Standards and to Improv...How Texas Instruments Uses InfluxDB to Uphold Product Standards and to Improv...
How Texas Instruments Uses InfluxDB to Uphold Product Standards and to Improv...InfluxData
 
Behavior Driven Development (BDD)
Behavior Driven Development (BDD)Behavior Driven Development (BDD)
Behavior Driven Development (BDD)Ajay Danait
 
Bihar Skill Development Mission, Kushal Yuva Program
Bihar Skill Development Mission, Kushal Yuva ProgramBihar Skill Development Mission, Kushal Yuva Program
Bihar Skill Development Mission, Kushal Yuva ProgramSuphal Kumar
 
Aula01 Gerência de Projetos - Conceitos e áreas de conhecimento do PMBOK
Aula01 Gerência de Projetos - Conceitos e áreas de conhecimento do PMBOKAula01 Gerência de Projetos - Conceitos e áreas de conhecimento do PMBOK
Aula01 Gerência de Projetos - Conceitos e áreas de conhecimento do PMBOKDaniela Brauner
 
Jira Basic Concepts
Jira Basic ConceptsJira Basic Concepts
Jira Basic ConceptsMAKSTraining
 
Project Management in Agile Organizations - Stage Gate and Agile
Project Management in Agile Organizations - Stage Gate and AgileProject Management in Agile Organizations - Stage Gate and Agile
Project Management in Agile Organizations - Stage Gate and AgileKnowit_TM
 
Jira as a Test Management Tool
Jira as a Test Management ToolJira as a Test Management Tool
Jira as a Test Management ToolXpand IT
 
Fluxo de Processos do Guia PMBOK® – 6ª Edição
Fluxo de Processos do Guia PMBOK® – 6ª EdiçãoFluxo de Processos do Guia PMBOK® – 6ª Edição
Fluxo de Processos do Guia PMBOK® – 6ª EdiçãoRicardo Viana Vargas
 
Maori showbands Masters Thesis_Dissertation 2009
Maori showbands  Masters Thesis_Dissertation 2009 Maori showbands  Masters Thesis_Dissertation 2009
Maori showbands Masters Thesis_Dissertation 2009 Dr Rawiri Waretini-Karena
 
Gerenciamento de Processos de Negócio - BPM: O modelo de gestão do Século XXI
Gerenciamento de Processos de Negócio - BPM: O modelo de gestão do Século XXIGerenciamento de Processos de Negócio - BPM: O modelo de gestão do Século XXI
Gerenciamento de Processos de Negócio - BPM: O modelo de gestão do Século XXICRA-BA
 
01 iec t1_s1_oo_ps_session_01
01 iec t1_s1_oo_ps_session_0101 iec t1_s1_oo_ps_session_01
01 iec t1_s1_oo_ps_session_01Niit Care
 
AndroidMakers2023.pdf
AndroidMakers2023.pdfAndroidMakers2023.pdf
AndroidMakers2023.pdfConfetti3
 
BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)Renato Groff
 
Shift Left - Approach and practices with IBM
Shift Left - Approach and practices with IBMShift Left - Approach and practices with IBM
Shift Left - Approach and practices with IBMIBM UrbanCode Products
 
Using Software Architecture Principles in Practice
Using Software Architecture Principles in PracticeUsing Software Architecture Principles in Practice
Using Software Architecture Principles in PracticeEoin Woods
 
Jarian van de Laar - Test Policy - Test Strategy
Jarian van de Laar - Test Policy - Test Strategy Jarian van de Laar - Test Policy - Test Strategy
Jarian van de Laar - Test Policy - Test Strategy TEST Huddle
 

What's hot (20)

CI/CT/CD and Role of Quality Engineering
CI/CT/CD and Role of Quality EngineeringCI/CT/CD and Role of Quality Engineering
CI/CT/CD and Role of Quality Engineering
 
Introduction to Behaviour Driven Development (BDD) and Cucumber with Java
Introduction to Behaviour Driven Development (BDD) and Cucumber with JavaIntroduction to Behaviour Driven Development (BDD) and Cucumber with Java
Introduction to Behaviour Driven Development (BDD) and Cucumber with Java
 
How Texas Instruments Uses InfluxDB to Uphold Product Standards and to Improv...
How Texas Instruments Uses InfluxDB to Uphold Product Standards and to Improv...How Texas Instruments Uses InfluxDB to Uphold Product Standards and to Improv...
How Texas Instruments Uses InfluxDB to Uphold Product Standards and to Improv...
 
Behavior Driven Development (BDD)
Behavior Driven Development (BDD)Behavior Driven Development (BDD)
Behavior Driven Development (BDD)
 
Bihar Skill Development Mission, Kushal Yuva Program
Bihar Skill Development Mission, Kushal Yuva ProgramBihar Skill Development Mission, Kushal Yuva Program
Bihar Skill Development Mission, Kushal Yuva Program
 
Aula01 Gerência de Projetos - Conceitos e áreas de conhecimento do PMBOK
Aula01 Gerência de Projetos - Conceitos e áreas de conhecimento do PMBOKAula01 Gerência de Projetos - Conceitos e áreas de conhecimento do PMBOK
Aula01 Gerência de Projetos - Conceitos e áreas de conhecimento do PMBOK
 
Jira Basic Concepts
Jira Basic ConceptsJira Basic Concepts
Jira Basic Concepts
 
clean code
clean codeclean code
clean code
 
Project Management in Agile Organizations - Stage Gate and Agile
Project Management in Agile Organizations - Stage Gate and AgileProject Management in Agile Organizations - Stage Gate and Agile
Project Management in Agile Organizations - Stage Gate and Agile
 
Jira as a Test Management Tool
Jira as a Test Management ToolJira as a Test Management Tool
Jira as a Test Management Tool
 
Fluxo de Processos do Guia PMBOK® – 6ª Edição
Fluxo de Processos do Guia PMBOK® – 6ª EdiçãoFluxo de Processos do Guia PMBOK® – 6ª Edição
Fluxo de Processos do Guia PMBOK® – 6ª Edição
 
Maori showbands Masters Thesis_Dissertation 2009
Maori showbands  Masters Thesis_Dissertation 2009 Maori showbands  Masters Thesis_Dissertation 2009
Maori showbands Masters Thesis_Dissertation 2009
 
Gerenciamento de Processos de Negócio - BPM: O modelo de gestão do Século XXI
Gerenciamento de Processos de Negócio - BPM: O modelo de gestão do Século XXIGerenciamento de Processos de Negócio - BPM: O modelo de gestão do Século XXI
Gerenciamento de Processos de Negócio - BPM: O modelo de gestão do Século XXI
 
01 iec t1_s1_oo_ps_session_01
01 iec t1_s1_oo_ps_session_0101 iec t1_s1_oo_ps_session_01
01 iec t1_s1_oo_ps_session_01
 
AndroidMakers2023.pdf
AndroidMakers2023.pdfAndroidMakers2023.pdf
AndroidMakers2023.pdf
 
BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)
 
Gestão de Projetos segundo a IPMA
Gestão de Projetos segundo a IPMAGestão de Projetos segundo a IPMA
Gestão de Projetos segundo a IPMA
 
Shift Left - Approach and practices with IBM
Shift Left - Approach and practices with IBMShift Left - Approach and practices with IBM
Shift Left - Approach and practices with IBM
 
Using Software Architecture Principles in Practice
Using Software Architecture Principles in PracticeUsing Software Architecture Principles in Practice
Using Software Architecture Principles in Practice
 
Jarian van de Laar - Test Policy - Test Strategy
Jarian van de Laar - Test Policy - Test Strategy Jarian van de Laar - Test Policy - Test Strategy
Jarian van de Laar - Test Policy - Test Strategy
 

Similar to Java VS Kotlin

Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...
Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...
Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...Édipo Souza
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaFernando Camargo
 
TDC2016SP - Kotlin 1.0: Evolua seu código Java
TDC2016SP - Kotlin 1.0: Evolua seu código JavaTDC2016SP - Kotlin 1.0: Evolua seu código Java
TDC2016SP - Kotlin 1.0: Evolua seu código Javatdc-globalcode
 
Poo slides01
Poo slides01Poo slides01
Poo slides01jmtofoli
 
Kotlin - Evolua seu código Java (TDC-2016) Alex Magalhaes
Kotlin - Evolua seu código Java (TDC-2016) Alex MagalhaesKotlin - Evolua seu código Java (TDC-2016) Alex Magalhaes
Kotlin - Evolua seu código Java (TDC-2016) Alex MagalhaesAlex Magalhaes
 
Grupo de estudo - Kotlin
Grupo de estudo - KotlinGrupo de estudo - Kotlin
Grupo de estudo - KotlinAndré Justi
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfAndreCosta502039
 
Comparando python com outras linguagens de programação
Comparando python com outras linguagens de programaçãoComparando python com outras linguagens de programação
Comparando python com outras linguagens de programaçãoValore I/O
 
C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015Renato Groff
 
C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015Renato Groff
 
Padrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAAPadrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAAAricelio Souza
 
Aula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane FidelixAula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane FidelixCris Fidelix
 
Aula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane FidelixAula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane FidelixCris Fidelix
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemassauloroos01
 
C# 6.0 - Novos Recursos (Agosto/2015)
C# 6.0 - Novos Recursos (Agosto/2015)C# 6.0 - Novos Recursos (Agosto/2015)
C# 6.0 - Novos Recursos (Agosto/2015)Renato Groff
 

Similar to Java VS Kotlin (20)

Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...
Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...
Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em Java
 
TDC2016SP - Kotlin 1.0: Evolua seu código Java
TDC2016SP - Kotlin 1.0: Evolua seu código JavaTDC2016SP - Kotlin 1.0: Evolua seu código Java
TDC2016SP - Kotlin 1.0: Evolua seu código Java
 
Poo slides01
Poo slides01Poo slides01
Poo slides01
 
Kotlin - Evolua seu código Java (TDC-2016) Alex Magalhaes
Kotlin - Evolua seu código Java (TDC-2016) Alex MagalhaesKotlin - Evolua seu código Java (TDC-2016) Alex Magalhaes
Kotlin - Evolua seu código Java (TDC-2016) Alex Magalhaes
 
Grupo de estudo - Kotlin
Grupo de estudo - KotlinGrupo de estudo - Kotlin
Grupo de estudo - Kotlin
 
Código limpo
Código limpoCódigo limpo
Código limpo
 
A Arte do Código Limpo
A Arte do Código LimpoA Arte do Código Limpo
A Arte do Código Limpo
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
Interface
InterfaceInterface
Interface
 
Comparando python com outras linguagens de programação
Comparando python com outras linguagens de programaçãoComparando python com outras linguagens de programação
Comparando python com outras linguagens de programação
 
C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015
 
C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015
 
Linguagem C - Funções
Linguagem C - FunçõesLinguagem C - Funções
Linguagem C - Funções
 
Padrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAAPadrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAA
 
Aula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane FidelixAula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane Fidelix
 
Aula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane FidelixAula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane Fidelix
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemas
 
C# 6.0 - Novos Recursos (Agosto/2015)
C# 6.0 - Novos Recursos (Agosto/2015)C# 6.0 - Novos Recursos (Agosto/2015)
C# 6.0 - Novos Recursos (Agosto/2015)
 
Aula2
Aula2Aula2
Aula2
 

More from André Justi

Treinamento Docker Básico
Treinamento Docker BásicoTreinamento Docker Básico
Treinamento Docker BásicoAndré Justi
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação DockerAndré Justi
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação mavenAndré Justi
 
Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)André Justi
 

More from André Justi (6)

Intro à Graphql
Intro à GraphqlIntro à Graphql
Intro à Graphql
 
Treinamento Docker Básico
Treinamento Docker BásicoTreinamento Docker Básico
Treinamento Docker Básico
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação Docker
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação maven
 
Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)
 
GIT Básico
GIT BásicoGIT Básico
GIT Básico
 

Java VS Kotlin

  • 1.
  • 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.
  • 29. Operator overloading Coroutines Destructuring Declarations Kotlin Test Returns and Jumps Generics Object Expressions Inline Classes Inline Functions Ranges and Progressions Type-Safe Builders e DSLs Function Receiver Equality OUTRAS FEATURES A SEREM ESTUDADAS
  • 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
  • 31. Acesse: https://gist.github.com/justiandre/6b478e9647be921b302f1c55d6146e63 Site Linkedin: in/andrejusti GitHub: justiandre SlideShare: justiandre E-mails Pessoal: justi.andre@gmail.com Meli: andre.justi@mercadolivre.com ANDRÉ JUSTI Obrigado