KOTLIN
Uma visão geral sobre Kotlin multiplataforma
Slide 2
Slide 2 text
/_rafaeltoledo
/rafaeltoledo
Slide 3
Slide 3 text
Kotlin
● Open Source, criada em 2010 pela JetBrains
● Estaticamente tipada, segura e programática
● Design inspirado em linguagens como Java,
Scala, C# e Groovy
● Orientada a Objetos, com características
Funcionais
3
Slide 4
Slide 4 text
Linhas de código em Kotlin no Github
Slide 5
Slide 5 text
ADOPT
Slide 6
Slide 6 text
Características
6
DATA
CLASSES
TYPE
ALIAS
LAMBDA
DSL
NULL
SAFETY
PROPERTIES
EXTENSIONS
Slide 7
Slide 7 text
Plataformas
7
JVM JS NATIVE
Slide 8
Slide 8 text
Plataformas
8
JVM JS NATIVE
ANDROID
Slide 9
Slide 9 text
Kotlin para Android
● Compatibilidade - Java 6
● Performance
● Interoperabilidade
● Footprint: standard library e runtime adiciona apenas +/- 100Kb ao APK
● Tempo de Compilação
● Curva de Aprendizado
9
Kotlin para JavaScript
● Atualmente (1.2) ECMAScript 5.1 - roadmap ECMAScript 2015
● Tamanho otimizado - DCE (Dead Code Elimination)
● JavaScript legível
● Compatibilidade com JavaScript já existente
● Mesmas funcionalidades da Standard Library da JVM
13
Slide 14
Slide 14 text
Kotlin para JavaScript
● Atualmente (1.2) ECMAScript 5.1 - roadmap ECMAScript 2015
● Tamanho otimizado - DCE (Dead Code Elimination)
● JavaScript legível
● Compatibilidade com JavaScript já existente
● Mesmas funcionalidades da Standard Library da JVM
14
REACT &
NODEJS!
Slide 15
Slide 15 text
Kotlin para JavaScript
● É possível interoperar com qualquer outro módulo JavaScript
● Strong-typed APIs / TypeScript - https://github.com/kotlin/ts2kt
● Dynamic types para outros cenários
15
Slide 16
Slide 16 text
Kotlin Native
● Código nativo, sem VM
● Backend baseado em LLVM
● Interoperabilidade com código nativo - binding gerado a partir do .h
● Mac / iOS - interoperabilidade com Objective C
● Atualmente na versão 0.7 - em desenvolvimento
16
Slide 17
Slide 17 text
Kotlin Native
● Windows (x86_64)
● Linux (x86_64, arm32, MIPS e MIPS little endian)
● MacOS (x86_64)
● iOS (arm64)
● Android (arm32 e arm64)
● WebAssembly (wasm32)
17
Kotlin Multiplataforma - experimental
● A partir da versão 1.2
● JVM e JavaScript (Native previsto)
● Módulos que podem ser compilados para diferentes plataformas
● common, platform e regular
24
Slide 25
Slide 25 text
Módulo 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
25
Slide 26
Slide 26 text
Módulo 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
26
Slide 27
Slide 27 text
Módulo 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
Módulo Multiplataforma - Código comum
package com.thoughtworks.foo
expect class Foo(bar: String) {
fun frob()
}
fun main(args: Array) {
Foo("Hello").frob()
}
34
Slide 35
Slide 35 text
Módulo Multiplataforma - Código JVM
package com.thoughtworks.foo
actual class Foo actual constructor(val bar: String) {
actual fun frob() {
println("Frobbing the $bar")
}
}
35
a gente tivesse um projeto definitivamente full stack em
Kotlin?
40
Slide 41
Slide 41 text
No content
Slide 42
Slide 42 text
42
https://github.com/JetBrains/kotlinconf-app
Slide 43
Slide 43 text
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
43
Slide 44
Slide 44 text
OBRIGADO
Para perguntas ou sugestões:
Rafael Toledo
rdtoledo@thoughtworks.com
speakerdeck.com/rafaeltoledo
44