Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C...

37
Going beyond JVM with Kotlin Victor Kropp @kropp victor.kropp.name

Transcript of Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C...

Page 1: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Goingbeyond JVMwith Kotlin—

Victor [email protected]

Page 2: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin
Page 3: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin
Page 4: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin
Page 5: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin
Page 6: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin
Page 7: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

CC++C#Objective-CSwift

JavaKotlin

Objective-CSwift

JavaPythonRuby

JavaScriptTypeScript

Page 8: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

CC++C#Objective-CSwift

Java

Objective-CSwift

JavaPythonRuby

JavaScriptTypeScript

Page 9: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin
Page 10: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Kotlin

Kotlin

Kotlin

Kotlin

Kotlin

Page 11: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

https://kotlinlang.org

Page 12: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Kotlin in Action

Page 13: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Kotlin Koans

https://try.kotl.in

Page 14: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Using the same languageacross the platforms

‣ Everyone on the team speaks the same language

‣ Single team working on all apps

‣ Simplify full-stack development

Page 15: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Share codebetween platforms

Page 16: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Write once,run everywhere

Page 17: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Write once,debug everywhere

Page 18: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Kotlin

Kotlin

Kotlin

Kotlin

Kotlin

Page 19: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Kotlin/Native

Kotlin/JVM

Kotlin/Native

Kotlin/JVM

Kotlin/JS

Page 20: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Code sharing

‣ Share data structures

‣ Share business logic

Page 21: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Code sharing

‣ Share data structures

‣ Share business logic

‣ Share tests!

Page 22: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Code sharing

‣ Share data structures

‣ Share business logic

‣ Share tests!

‣ Do NOT share UI

Page 23: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin
Page 24: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Common module

apply plugin: 'kotlin-platform-common'

dependencies {

compile "org.jetbrains.kotlin:kotlin-stdlib-common:$version"

}

Page 25: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Platform module

apply plugin: 'kotlin-platform-jvm'

dependencies {

compile "org.jetbrains.kotlin:kotlin-stdlib:$version"

expectedBy project(":mp-common")

}

Page 26: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

expect/actual

expect class Foo {

fun baz()

}

actual class Foo {

actual fun baz() {}

}

Page 27: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

expect/actual

expect class Foo(bar: String) {

fun baz()

}

actual class Foo actual constructor(val bar: String) {

actual fun baz() {}

}

Page 28: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

typealias

expect annotation class Test

actual typealias Test = org.junit.Test

Page 29: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

typealias

expect class BigDecimal {

fun divideAndRemainder(d: BigDecimal): Array<BigDecimal>

}

actual typealias BigDecimal = java.math.BigDecimal

Page 30: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Sample project

Page 31: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Show me the code!

Page 32: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Code

https://github.com/kropp/kotlin-multiplatform-sample

Page 33: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Common modules

‣ Coroutines‣ kotlin.test‣ kotlinx.serializaion‣ kotlinx.html

And many more libraries in the future

Page 34: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Recap

‣ Kotlin allows you to write the whole application in a single language

‣ Reuse business logic and data structures‣ Integrate with respective platform

‣ Multiplatfom projects for JVM & JS available nowKotlin/Native coming soon

Page 35: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Thank you!

Victor [email protected]

Page 36: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin

Questions?

Victor [email protected]

Page 37: Going beyond JVM with Kotlin - victor.kropp.name Going beyond JVM with Kotlin.pdfC# Objective-C Swift Java Objective-C Swift Java Python Ruby JavaScript TypeScript. Kotlin Kotlin Kotlin