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

Apresentação Kotlin

Apresentação Kotlin

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]