Por que usar Kotlin no desenvolvimento Android? ● Compatibilidade - Java 6 ● Performance ● Interoperabilidade ● Footprint: standard library & runtime ~100Kb ● Tempo de Compilação não é mais um problema ● Tooling evoluindo 5
Por que usar Kotlin no desenvolvimento para JVM? ● Expressividade ● Escalabilidade & Performance - Kotlin Coroutines ● Interoperabilidade com código já existente - migração gradual ● Tooling 7
Por que usar Kotlin no desenvolvimento JavaScript? ● JavaScript Optimized - DCE (Dead Code Elimination) ● JavaScript legível e depurável ● Compatibilidade com código JavaScript pré-existente ● Mesmas features da Standard Library da JVM - incluindo Coroutines 11
Kotlin para JavaScript - e a tipagem? ● É possível interagir com qualquer tipo de código JavaScript ● Strong-typed APIs / TypeScript -> https://github.com/kotlin/ts2kt ● Dynamic types para outros cenários 13
KotlinJS - NodeJS fun main(args: Array) { val express = require("express") val app = express() app.get("/", { req, res -> res.type("text/plain") res.send("i am a beautiful butterfly") }) app.listen(3000, { println("Listening on port 3000") }) } 16
Why to use Kotlin for native development? ● Código Nativo ● Backend baseado no LLVM ● Interoperabilidade com código nativo e bibliotecas - binding gerado a partir de arquivos .h ● MacOS / iOS - Objective C e Swift ● Atualmente na versão 0.9 - em desenvolvimento - 1.3 17
Kotlin Native - C interop fun fetch() { val res = curl_easy_perform(curl) if (res != CURLE_OK) println("curl_easy_perform() failed") } fun CPointer.toKString(length: Int): String { val bytes = this.readBytes(length) return bytes.stringFromUtf8() } 21
Módulos Multiplataforma common: Contém código que não é específico a nenhuma plataforma, assim como a declaração de APIs que necessitam de implementação específica platform: Contém a implementação das APIs definidas em um módulo common, além de outros códigos específicos da plataforma regular: Módulo comum que tem como target uma plataforma específica 26
Multiplatform Module - JVM implementation package com.example.foo actual class Foo actual constructor(val bar: String) { actual fun frob() { println("Frobbing the $bar") } } 36
Por que usar a Kotlin Gradle DSL? ● Aumento na velocidade de análise e compilação dos build scripts, em comparação com Groovy ● IDE friendly, melhor autocomplete ● Unificação da linguagem de desenvolvimento ● 1.0 RC 6 incluído no Gradle 4.10.1, estável no Gradle 5.0 (próxima versão) 40
Links BLOG OFICIAL https://blog.jetbrains.com/kotlin KOTLIN KOANS https://kotlinlang.org/docs/tutorials/koans.html KOTLIN IN ACTION https://www.manning.com/books/kotlin-in-action 48