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

Apresentação Kotlin

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

Apresentação Kotlin

Avatar for thiagocortat

thiagocortat

June 29, 2017
Tweet

More Decks by thiagocortat

Other Decks in Programming

Transcript

  1. DESENVOLVENDO COM KOTLIN Thiago Cortat Tavares [email protected] Vamos conhecer uma

    forma mais amigáveis de construir aplicativos em Android
  2. EU • Atuo desde 2008 na área de mobile (J2ME)

    • Fiz meu mestrado pela UFF, atuando na área de mobile • Líder técnico do Ime de mobile do Peixe Urbano • Coordenador da Pós em Desenvolvimento Mobile no Infnet • Gerente de Desenvolvimento Mobile no Hotel Urbano
  3. Kotlin ì O que é Kotlin? ì É a linguagem

    de programação criada pela JetBrains, que roda em cima da JVM do Java. ì É concisa, segura, focada em interoperabilidade e com certeza pode ser uma alternaIva ao Java.
  4. Por que Kotlin? ì Linguagem Open Source ì Pode ser

    uIlizada em conjunto com diversos frameworks Java ì Menos código (Redução de muito Boilerplate) ì Null Safety ì Totalmente recomendada no desenvolvimento Android
  5. Por que Kotlin? ì Mas por que comecei a trabalhar

    com Kotlin ? ì Pela sua semelhança com Swid
  6. Features do Kotlin ì Inferência de Ipo ì Não existe

    Ipos primiIvos ì “Object” é agora “Any” ì “void” é agora “Unit” ì Métodos e classes são final a menos que declarados como "open"
  7. Setup ì Como começar? ì Caso esteja uIlizando Android Studio

    2.X, vá em Preferences -> Plugins -> Browse Repositories e escreva Kotlin. Clique em Install.
  8. Setup ì Execute CMD + SHIFT + A e depois

    digite “Configure Kotlin in Project" ì As dependências serão adicionadas no build.gradle
  9. Setup ì No Android Studio 3.0, não precisa se preocupar

    porque já vêm com Kotlin instalado.
  10. Setup ì É possível ter na mesma pasta os arquivos

    Java e Kotlin, porém é aconselhável dividi-los em pastas separadas.
  11. Propriedades public class MyJavaClass { private final int a =

    1; private int b = 1; private final int c = 1; private int d = 1; public int getA() { return a; } public int getB() { return b; } public void setB(int b) { this.b = b; } public int getC() { return c; } public int getD() { return d; } public void setD(int d) { this.d = d; } } class MyKotlinClass { val a: Int = 1 var b: Int = 1 val c = 1 var d = 1 }
  12. val / var ì GeKers e SeKers são gerados automaIcamente

    ì Caso deseje customizá-los: var bar: Int get() {...} set(bar: Int) {...}
  13. String template class MyKotlinClass { val name = "Thiago" val

    surname = "Cortat" val example = "Meu nome é $name $surname" } class MyJavaClass { final String getName() { return "Thiago"; } final String getSurname() { return "Cortat"; } final String getExample() { return String.format("Meu nome é %s %s", getName(), getSurname()); } }
  14. Propriedade lateinit SDK mySdk; //OU SDK mySdk = null; mySdk

    = new SDK(); var mySdk : SDK //ERRO mySdk = SDK() lateinit var mySdk : SDK mySdk = SDK()
  15. Propriedade Lazy class MyItem class MyKotlinClass { val item by

    lazy { MyItem() } } class MyJavaClass { class MyItem { } MyItem item; final MyItem getItem() { if (item == null) { item = new MyItem(); } return item; } }
  16. Single-expression functions ì Em Kotlin funções simples podem ser simplificadas

    ì É possível remover as chaves ì E até mesmo o Ipo de retorno
  17. Smart Cast class MyUtils { static void example(View myView) {

    if (myView instanceof ImageView) { ImageView imageView =(ImageView) myView; imageView.setImageAlpha(10); } else if (myView instanceof TextView) { TextView textView = (TextView) myView; textView.setText("Ciao"); } } } fun example1(myView: View) { if (myView is ImageView) { myView.setImageAlpha(10) } else if (myView is TextView) { myView.setText("Ciao") } }
  18. let ì let funciona para verificar se o atributo é

    diferente de nulo Preferences.getUser()?.let { showUserName(it.name) showUserEmail(it.email) } Preferences.getUser()?.let { user -> showUserName(user.name) showUserEmail(user.email) } ou
  19. Extensions ì O que faz? ì Fornece a capacidade de

    estender uma classe com nova funcionalidade sem ter que herdar da classe.
  20. Extensions class MyUtils { static boolean isBig(String str) { return

    str.length() > 10; } } class MyJavaClass { void example() { MyUtils.isBig("why?!"); MyUtils.isBig("harder, better, ..."); } } fun String.isBig(): Boolean { return length() > 10 } fun example() { "why?!".isBig() // false! "harder, better, ...".isBig() // true! }
  21. When expression ì Semelhante ao SWITCH, porém com muito mais

    recursos val message = when (statusCode) { in 200..299 -> "OK" in 300..399 -> "Find it somewhere else" else -> "Oops" }
  22. Kotlin Android Extensions Java: recyclerView = (RecyclerView)findViewById(R.id.recycler_view); Kotlin: recyclerView =

    findViewById(R.id.recycler_view) as RecyclerView Kotter Knife: val recyclerView by bindView<RecyclerView>(R.id.recycler_view) Extensions Library: just import import kotlinx.android.synthetic.main.my_layout.* ì Vamos comparar os Ipos de Bind com Views existentes
  23. ì AutomaIcamente obtém as Views com ids definidos no XML

    ì Sem necessidade de casts Kotlin Android Extensions
  24. Data Class ì O compilador automaIcamente implementa as funções: ì

    equals() / hashCode() ì toString() ì Formata toString como -> "User(name=John, age=42)" ì copy()
  25. Data Class public class Speaker { private String id; private

    String name; private String url; public void setId(String id) { this.id = id;} public String getId() { return id;} public void setName(String name){this.name=name;} public String getName() { return name;} public void setUrl(String url){this.url = url;} public String getUrl() { return url; } @Override public int hashCode() {…} @Override public boolean equals(Object obj) {…} @Override public String toString() { return "Speaker{" + "id='" + id + "'" + ", name='" + name + "'" + ", url='" + url + "'" + "}"; } }
  26. Construtor com parâmetros default ì Exemplo val nut1 = NutritionFacts(“Chocolate”,

    200) val nut2 = NutritionFacts(“Pizza”, 1000, 70) val nut3 = NutritionFacts(“Bolo”, 500, 20, 100) val nut4 = NutritionFacts(“Bolo”, 500, 20, 100, 3)
  27. Lambdas void example() { View view = findViewById(R.id.button); view.setOnClickListener( new

    View.OnClickListener() { @Override public void onClick(View v) { Log.d("TAG", "Item clicked!"); } } ); } fun example() { val view = findViewById(R.id.button) view.setOnClickListener { Log.d("TAG", "Item clicked!") } } ì Lambda é uma maneira de representar uma função
  28. Funções de alta-ordem em Kotlin ì Funções de alta-ordem tomam

    funções como parâmetros, como retorno ou como ambas.
  29. ì Kotlin possui dezenas de métodos para trabalhar com funções

    de alta-ordem. Funções de alta-ordem em Kotlin
  30. class MyUtils { static void example() { //Lista List<String> os

    = Arrays.asList(“Android", "iOS", null, "Windows Phone"); } } Funções de alta-ordem
  31. class MyUtils { static void example() { //Lista List<String> os

    = Arrays.asList("Android","iOS", null, "Windows Phone"); //Remove valores null List<String> osNotNull = new ArrayList<>(); for (String name : os) { if (name != null) osNotNull.add(name); } } } Funções de alta-ordem
  32. class MyUtils { static void example() { //Lista List<String> os

    = Arrays.asList("Android","iOS", null, "Windows Phone”); //Remove valores null List<String> osNotNull = new ArrayList<>(); for (String name : os) { if (name != null) osNotNull.add(name); } //SORT Collections.sort(osNotNull, new Comparator<String>() { @Override public int compare(String l, String r) { return r.length() - l.length(); } }); } } Funções de alta-ordem
  33. class MyUtils { static void example() { //Lista List<String> os

    = Arrays.asList("Android","iOS", null, "Windows Phone”); //Remove valores null List<String> osNotNull = new ArrayList<>(); for (String name : os) { if (name != null) osNotNull.add(name); } //SORT Collections.sort(osNotNull, new Comparator<String>() { @Override public int compare(String l, String r) { return r.length() - l.length(); } }); //Map to UpperCase for (String name : osNotNull) { String value = name.toUpperCase(); } } } Funções de alta-ordem Resultado: [ IOS, ANDROID, WINDOWS PHONE ]
  34. fun example() { //Lista val os = listOf("Android", "iOS", null,"Windows

    Phone") os.filterNotNull() //Remove valores null .sortedBy { it.length() } //Sort .map { it.toUpperCase() } //Map to UpperCase } Funções de alta-ordem em Kotlin Resultado: [ IOS, ANDROID, WINDOWS PHONE ]
  35. ANKO ì Anko é uma biblioteca desenvolvida pela JetBrains que

    torna o desenvolvimento Android mais rápido e mais fácil. ì Faz o seu código limpo e fácil de ler. ì Repositório repleto de extensões para os mais diversos propósitos no Android ì DSL (Domain-Specific Language) para a criação de layouts ì hvps://github.com/Kotlin/anko
  36. Performance ì PraIcamente nenhum impacto no desempenho ì Alguns códigos

    Kotlin são mais rápidos ì Muito melhorado em compilações incrementais
  37. Benchmark de velocidade de compilação Kotlin vs Java ì Dez

    compilações consecuIvas de Clean Build
  38. Custo ì Kotlin Standard Library ì 5,723 methods ì JAR

    size: 900 KB ì Em Comparação: ì Fresco (0.14.0) - 11,122 methods ì Guava (19.0) - 15,076 methods ì Google Play Service - 20,298 methods
  39. Ganhos com Kotlin no HU ì Redução do número de

    bugs e crashes do App CrashlyIcs ì Hoje temos 88.5% da nossa base já na versão nova e esta com 70% do código em Kotlin.
  40. Ganhos com Kotlin no HU ì ProduIvidade ì No que

    se refere a parte de Android, entregávamos em média 38 pontos em cada Sprint de duas semanas. ì Agora, depois da adoção do Kotlin, entregamos em média de 51 pontos. ì Um aumento na produIvidade de 34%
  41. ì Execute CMD + SHIFT + A e depois digite

    “Convert Java File to Kotlin File" Conversão Java -> Kotlin
  42. Conversão Java -> Kotlin ì Ao converter um Java file

    para Kotlin aparecerá uma mensagem se deseja converter também as classes que fazem referecia a esta classe. ì Uma boa dica é selecionar “Cancelar” e se focar em corrigir uma classe Kotlin por vez. Caso confirme a mensagem um “Mar de conflitos irá ocorrer em seu projeto” ì É muito mais recomendável trabalhar somente com um arquivo por vez.
  43. Aproveitando para fazer jabá. • Juntamente com a cradproduct.io, vamos

    realizar na data sugerida de 29/07 e 30/07 (Sábado e Domingo), curso de 16h de imersão em Kotlin. • Interessados, acessem o site, hvp:// cradproduct.io a parIr de amanhã mais informações ou podem me enviar um email [email protected]