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

Kotlin 101

Kotlin 101

Nesta apresentação, vamos conhecer um pouco mais sobre Kotlin, a linguagem de programação escolhida pela Google, para substituir o Java como linguagem oficial de desenvolvimento Android, a partir de 2017. Uma linguagem moderna, que reúne uma série de recursos muito úteis inspirados em várias outras linguagens, que permite o uso dos paradigmas funcional e orientado a objeto juntos, concisa, multi-plataforma e totalmente interoperável com Java, o que permite que você comece a usá-la agora mesmo! Curioso? Então não perca!!

Avatar for Diego Santos

Diego Santos

October 23, 2019

More Decks by Diego Santos

Other Decks in Programming

Transcript

  1. Kotlin • Desenvolvida pela Jetbrains desde 2011 • Open Source

    ▪ • 100% interoperável com Java ▪ • Não custa nada começar a usar ▪ • Linguagem oficial para o desenvolvimento Android ▪
  2. Fácil adoção (Android) • Curva de aprendizado relativamente baixa •

    Sintaxe e Features conhecidas ▪ • Comunidade ativa ▪ • Aderência com Android Studio • Boa documentação • Compila para bytecode
  3. Consisa User.java public class User { private Long id; private

    String name; public User(Long id, String name) { this.id = id; this.name = name; } @Override public String toString() { return "id=" + id + ", name='" + name; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof User)) return false; User user = (User) o; return id.equals(user.id) && name.equals(user.name); } @Override public int hashCode() { return Objects.hash(id, name); } } User.kt data class User(val id: Long, val name: String)
  4. var vs val e type inference // imutável (valor fixo)

    val name: String = "Maria" // compilation error name = "Joana" // mutável (valor Variável) var lastName = "Santos" // compilation success lastName = "Silva" // compilation error lastName = 0
  5. Properties class Person(var firstName: Long, var lastName: String?) { var

    fullName = get() = "$firstName $lastName" set(value) { val split = value.split(" ") firstName = value[0] lastName = value[1] } }
  6. Solução para null pointer Exception User.kt data class User(var id:

    Long, var name: String?) user?.name?.let { // "it" é o valor da variável "name" setText( it ) } User.java if (user != null && user.name != null) { setText( user.name ); }
  7. Solução para null pointer Exception User.kt data class User(var id:

    Long, var name: String?) user?.name?.let { // "it" é o valor da variável "name" setText( it ) } // Elvis operator var name = user.name ?: "" User.java if (user != null && user.name != null) { setText( user.name ); } String name = user.name != null ? user.name : ""
  8. If como expressão fun maximum(first: Int, second: Int): Int {

    if (first > second) { return first } else { return second } }
  9. If como expressão fun maximum(first: Int, second: Int): Int {

    if (first > second) { return first } else { return second } } fun maximum(first: Int, second: Int): Int { return if (first > second) { first } else { second } }
  10. If como expressão fun maximum(first: Int, second: Int): Int {

    (...) } fun maximum(first: Int, second: Int): Int { return if (first > second) { first } else { second } } fun maximum(first: Int, second: Int) = if (first > second) { first } else { second }
  11. If como expressão fun maximum(first: Int, second: Int): Int {

    (...) } fun maximum(first: Int, second: Int): Int { (...) } fun maximum(first: Int, second: Int) = if (first > second) { first } else { second } fun maximum(first: Int = 2, second: Int = 3) = if (first > second) first else second
  12. Parâmetros default fun maximum(first: Int = 2, second: Int =

    3) = if (first > second) first else second maximum(2,3) maximum(first = 2) maximum(second = 3) maximum()
  13. When - “Switch esperto” Switch no Java switch (number) {

    case 1: { print("number == 1") break; } case 2: { print("number == 2") break; } default: { print("number is neither 1 nor 2") break; } }
  14. When - “Switch esperto” when (number) { 1 -> print("number

    == 1") 2 -> print("number == 2") else -> { print("number is neither 1 nor 2") } }
  15. When - “Switch esperto” when (number) { 1 -> print("number

    == 1") 2 -> print("number == 2") else -> { // Note the block print("number is neither 1 nor 2") } } when (number) { in 1..10 -> print("number is in the range") in validNumbers -> print("number is valid") !in 10..20 -> print("number is outside the range") else -> print("none of the above") }
  16. Smart Cast val requestError: Throwable if (requestError is ResponseErrorException &&

    requestError.statusCode == NOT_FOUND_STATUS) { onNotFound(requestError) } fun onNotFound(throwable: Throwable) { (...) }
  17. Sealed class (Enum com superpoderes) sealed class Result<out T> {

    data class Success<out T : Any>(val data: T) : Result<T>() data class Error(val throwable: Throwable) : Result<Nothing>() } when (result) { is Result.Success -> onRequestSuccess(result.data) is Result.Error -> onError(result.throwable) }
  18. Destructuring class Person(var id, var firstName: Long, var age: Int)

    val person = Person(1, "Jon Snow", 20) println(id) //1 println(name) //Jon Snow println(age) //20 val(id, name, age) = person
  19. String interpolation class Person(var id, var firstName: Long, var age:

    Int) val person = Person(1, "Jon Snow", 20) // Person with id: 1 and name Jon Snow // Java return "Person with id: " + id + " and name " + name; // Kotlin return "Person with id: $id and name $name";
  20. Extension em Strings fun String.asNumber(): Double { return this.toDouble() }

    val numberString = “1” val number = numberString.asNumber()
  21. Infix function infix fun Int.plus(b : Int) : Int =

    this + b // Infix extension println(5 plus 10) // 15 // Default extension println(5.plus(10)) // 15
  22. Lambdas e High order functions // lambda // Funções anônimas

    // podem ser usadas como variáveis ou parâmetro const double = n => n * 2 // high order functions [1, 2, 3, 4].map(double) // [ 2, 4, 6, 8 ]
  23. Coroutines suspend fun listEvents() { val token = getToken() val

    events = getEvents(token) displayEvents(events) }
  24. Considerações finais • Kotlin não é bala de prata •

    Elegante e simples • Vale a pena o investimento ▪
  25. Referências Documentação Kotlin • https://kotlinlang.org/ Artigos • https://medium.com/@mayuroks/learn-kotlin-for-android-in-one-day-50aa0bc099b0 • https://www.zup.com.br/blog/11-dicas-nao-tao-rapidas-sobre-kotlin

    Apresentações • https://speakerdeck.com/alexgherschon/introduction-to-kotlin?slide=51 • https://speakerdeck.com/alexgherschon/kotlin-multiplatform-analytics-platform-as-example?slide= 53 • https://slides.com/desdulianto/kotlin#/14 Ambiente de testes • https://play.kotlinlang.org/