Kotlin pode ser usado em múltiplas plataformas como Android, JVM, JavaScript e nativo. Compartilhar código entre plataformas é possível com módulos Kotlin Multiplataforma que contêm código comum e implementações específicas de cada plataforma. O Kotlin também oferece ferramentas para integrar com IDEs e bibliotecas populares em cada plataforma.
6. 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
6
8. Por que usar Kotlin no desenvolvimento para JVM?
● Expressividade
● Escalabilidade & Performance - Kotlin Coroutines
● Interoperabilidade com código já existente - migração gradual
● Tooling
8
12. 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
12
14. Kotlin para JavaScript - e a tipagem?
● É possível interagir com qualquer tipo de código JavaScript
● Statically typed APIs / TypeScript -> https://github.com/kotlin/ts2kt
● Dynamic types para outros cenários
14
15. KotlinJS - jQuery
fun main(args: Array<String>) {
jq("#message").html("Hello from Kotlin")
}
15
17. KotlinJS - NodeJS
fun main(args: Array<String>) {
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")
})
} 17
18. Por que usar Kotlin no desenvolvimento nativo?
● 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
18
19. Kotlin Native supported targets
● Windows (x86_64)
● Linux (x86_64, arm32, MIPS e MIPS little endian)
● MacOS (x86_64)
● iOS (arm32, arm64, x64)
● Android (arm32 e arm64)
● STM32
● WebAssembly (wasm32)
19
22. Kotlin Native - C interop
fun fetch() {
val res = curl_easy_perform(curl)
if (res != CURLE_OK)
println("curl_easy_perform() failed")
}
fun CPointer<ByteVar>.toKString(length: Int): String {
val bytes = this.readBytes(length)
return bytes.stringFromUtf8()
} 22
26. Kotlin Multiplataforma
● Suporte introduzido na versão 1.2
● JVM & JavaScript (Native "meio que" funciona)
● módulos common, platform e regular
26
27. 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
27
36. Multiplatform Module - Common code
package com.example.foo
expect class Foo(bar: String) {
fun frob()
}
fun main(args: Array<String>) {
Foo("Hello").frob()
}
36
37. Multiplatform Module - JVM implementation
package com.example.foo
actual class Foo actual constructor(val bar: String) {
actual fun frob() {
println("Frobbing the $bar")
}
}
37
41. 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)
41