Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Java VS Kotlin

Java VS Kotlin

Apresentação com a comparação, vantagens e desvantagens entre Java 11 LTS e Kotlin 1.4!

Avatar for André Justi

André Justi

October 08, 2020

Other Decks in Technology

Transcript

  1. AGENDA ⇢ Motivação criação Kotlin ⇢ Utilização dentro do Mercado

    Livre ⇢ Kotlin vantagens e desvantagens ⇢ Features
  2. 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ÇÃO KOTLIN
  3. 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.
  4. 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
  5. VANTAGENS KOTLIN 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
  6. DESVANTAGENS KOTLIN 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
  7. 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.
  8. 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.
  9. 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.
  10. 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.
  11. 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.
  12. 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.
  13. 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.
  14. 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.
  15. 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.
  16. 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
  17. 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.
  18. 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.
  19. 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.
  20. 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.
  21. 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.
  22. 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.
  23. 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.
  24. 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.
  25. 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.
  26. 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.
  27. 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.
  28. 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
  29. 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ível somente a membros do Mercado Livre