KOTLIN
Compartilhando código com Kotlin Multiplataforma
Slide 2
Slide 2 text
ADOTE
Slide 3
Slide 3 text
https://pusher.com/state-of-kotlin
Slide 4
Slide 4 text
Plataformas
4
JVM JS NATIVE
ANDROID
Slide 5
Slide 5 text
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
Slide 6
Slide 6 text
https://bit.ly/2ATKly0
Slide 7
Slide 7 text
Por que usar Kotlin no desenvolvimento para JVM?
● Expressividade
● Escalabilidade & Performance - Kotlin Coroutines
● Interoperabilidade com código já existente - migração gradual
● Tooling
7
Slide 8
Slide 8 text
https://bit.ly/2jV4utA
Slide 9
Slide 9 text
JavaFX Framework for Kotlin
https://github.com/edvin/tornadofx
Slide 10
Slide 10 text
Ktor for building servers and clients
https://ktor.io
Slide 11
Slide 11 text
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
Slide 12
Slide 12 text
https://github.com/JetBrains/kotlin-wrappers
Slide 13
Slide 13 text
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
Slide 14
Slide 14 text
KotlinJS - jQuery
fun main(args: Array) {
jq("#message").html("Hello from Kotlin")
}
14
Slide 15
Slide 15 text
KotlinJS - React
class HelloComponent: RComponent() {
override fun RBuilder.render() {
div(classes = "content") {
h1 {
+"Hello!"
}
}
}
}
fun RBuilder.hello() = child(HelloComponent::class) { }
15
Slide 16
Slide 16 text
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
Slide 17
Slide 17 text
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
Slide 18
Slide 18 text
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)
18
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
Kotlin Multiplataforma
● Suporte introduzido na versão 1.2
● JVM & JavaScript (Native "meio que" funciona)
● módulos common, platform e regular
25
Slide 26
Slide 26 text
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 - Common code
package com.example.foo
expect class Foo(bar: String) {
fun frob()
}
fun main(args: Array) {
Foo("Hello").frob()
}
35
Slide 36
Slide 36 text
Multiplatform Module - JVM implementation
package com.example.foo
actual class Foo actual constructor(val bar: String) {
actual fun frob() {
println("Frobbing the $bar")
}
}
36
Slide 37
Slide 37 text
DI Multiplataforma
37
Slide 38
Slide 38 text
Mock Multiplataforma
38
Slide 39
Slide 39 text
KOTLIN GRADLE DSL
Bonus - por que não usar em todo o projeto então?
Slide 40
Slide 40 text
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
Slide 49
Slide 49 text
OBRIGADO!
Questions and feedbacks?
Rafael Toledo
[email protected]
speakerdeck.com/rafaeltoledo
github.com/rafaeltoledo
49