Kotlin 1.1: o que vem por aí?

Kotlin 1.1: o que vem por aí?

Apresentada no Kotlin Night São Paulo 2017

2dc2a52d38ee8c184deeceaadf9ed6ba?s=128

Rafael Toledo

February 22, 2017
Tweet

Transcript

  1. 2.

    Kotlin 1.1 M01 - 14 julho 2016 M02 - 20

    outubro 2016 M03 - 24 novembro 2016 M04 - 21 dezembro 2016 @_rafaeltoledo Beta - 19 janeiro 2017 Beta 2 - 2 fevereiro 2017 RC - 17 fevereiro 2017
  2. 4.

    Type Alias typealias Length = Double typealias Weight = Double

    typealias Action<T> = (T) -> Unit typealias Multimap<K, V> = Map<K, List<V>> @_rafaeltoledo
  3. 5.

    Herança em Data Classes open class Base(val baseParam: Int) data

    class Derived(val param: String): Base(param.lenght) @_rafaeltoledo
  4. 6.

    Sealed Classes sealed class Sealed class Derived : Sealed() {

    //... } // Em outro arquivo class Other : Sealed() { //... } @_rafaeltoledo
  5. 7.

    Method Reference val numberRegex = "\\d+".toRegex() val numbers = listOf("abc",

    "123", "456").filter { numberRegex.matches(it) } @_rafaeltoledo
  6. 8.

    Method Reference val numberRegex = "\\d+".toRegex() val numbers = listOf("abc",

    "123", "456").filter( numberRegex::matches) @_rafaeltoledo
  7. 9.

    Underscores para parâmetros fun loadProduct(id: Int) { api.fetchProduct(id) { (_,

    name, date) -> title.text = name createdOn.text = date.format() } } @_rafaeltoledo
  8. 10.

    Desestrutura de classes data class User(val username: String, val email:

    String) fun printUserData() { val (username, email) = fetchUser() println("${username}: ${email}") } @_rafaeltoledo
  9. 11.

    Underscores para numerais val oneMillion = 1_000_000 val hexBytes =

    0xFF_EC_DE_5E val bytes = 0b11010010_01101001_10010100_10010010 @_rafaeltoledo
  10. 12.

    Enums utilizados como generics enum class RGB { RED, GREEN,

    BLUE } print(enumValues<RGB>().joinToString { it.name }) @_rafaeltoledo
  11. 13.

    mod agora é rem // Operador mod marcado como deprecated

    val deprecatedValue = 247.mod(2) val value = 247.rem(2) @_rafaeltoledo
  12. 14.

    Coroutines - experimental É basicamente uma thread “leve” que pode

    ser pausada e retomada posteriormente “We think that now we have got a great design of coroutines for Kotlin, but we realize that it has not been battle-tested enough.” @_rafaeltoledo
  13. 16.

    Coroutines fun someWork(): CompletableFuture<String> = ... fun moreWork() = async

    { println("Work started") val str = await(someWork()) println("Work completed") } @_rafaeltoledo
  14. 17.

    Coroutines fun someWork(): CompletableFuture<String> = ... // CompletableFuture = minSdkVersion

    24 fun moreWork() = async { println("Work started") val str = await(someWork()) println("Work completed") } @_rafaeltoledo
  15. 18.

    Coroutines fun someWork(): CompletableFuture<String> = ... // CompletableFuture = minSdkVersion

    24 fun moreWork() = async { println("Work started") val str = await(someWork()) println("Work completed") } @_rafaeltoledo
  16. 20.

    JavaScript Não é mais considerado experimental :) Standard Library unificada.

    (ex. collections) Melhor geração de código - amigável a minifiers, linters, otimizadores, etc. Modificador external - para acesso a classes implementadas em JS @_rafaeltoledo
  17. 22.
  18. 23.

    Extensões val outDirFile = File(outputDir.path).takeIf { it.exists() } ?: return

    false val charFrequencies: Map<Char, Int> = text.groupingBy { it }.eachCount() @_rafaeltoledo
  19. 24.

    minOf / maxOf val list1 = listOf("a", "b") val list2

    = listOf("x", "y", "z") val minSize = minOf(list1.size, list2.size) val longestList = maxOf(list1, list2, compareBy { it.size }) @_rafaeltoledo
  20. 25.

    Map com valores default val map = mapOf("key" to 42)

    // returns non-nullable Int value 42 val value: Int = map.getValue("key") // throws NoSuchElementException map.getValue("key2") val mapWithDefault = map.withDefault { k -> k.length } // returns 4 val value2 = mapWithDefault.getValue("key2") @_rafaeltoledo
  21. 26.

    Subtração com Maps val map = mapOf("key" to 42) val

    emptyMap = map - "key" @_rafaeltoledo
  22. 28.

    Gradle buildscript { ext.kotlinVersion = '1.1.0-rc-91' repositories { jcenter() maven

    { url 'http://dl.bintray.com/kotlin/kotlin-eap-1.1' } } dependencies { ... classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" ... } } @_rafaeltoledo
  23. 31.

    Referências & Links Blog Oficial blog.jetbrains.com/kotlin What’s New 1.1 kotlinlang.org/docs/reference/whatsnew11.html

    Kotlin Evolution & Enhancement Process github.com/kotlin/KEEP Bug Tracker youtrack.jetbrains.com/issues/KT
  24. 33.

    www.concretesolutions.com.br Rio de Janeiro – Rua São José, 90 –

    cj. 2121 Centro – (21) 2240-2030 São Paulo - Av. Nações Unidas, 11.541 3º andar - Brooklin - (11) 4119-0449 Ajudamos empresas a criar produtos digitais de sucesso