Slide 1

Slide 1 text

@workingkills Eugenio Marletti Sharing [Kotlin code across platforms] is caring! KotlinConf

Slide 2

Slide 2 text

“app” “ ” “ ” “ ” “ ”

Slide 3

Slide 3 text

“app” iOS Android frontend backend tools “ ” “ ” “ ” “ ”

Slide 4

Slide 4 text

sharing

Slide 5

Slide 5 text

code sharing

Slide 6

Slide 6 text

code sharing

Slide 7

Slide 7 text

business logic sharing

Slide 8

Slide 8 text

bugs sharing

Slide 9

Slide 9 text

bugs sharing

Slide 10

Slide 10 text

fixes sharing

Slide 11

Slide 11 text

effort sharing

Slide 12

Slide 12 text

C++ J2ObjC / GWT JavaScript

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

THE ALGORITHM™

Slide 15

Slide 15 text

THE ALGORITHM™ C++ ObjC++ JavaScript TypeScript

Slide 16

Slide 16 text

C++ ObjC++ JavaScript TypeScript iOS !" JavaScriptCore Android !" WebView

Slide 17

Slide 17 text

C++ ObjC++ JavaScript TypeScript iOS !" JavaScriptCore Android !" W ͊̊̏̃͑̽̃̕ ̘͖̯ 㸅 ̨͇̯ ̶ȩ̧̟̝͔ ͔͎̗̬̼̓̒̄̍̓͐̒̎̕ b̡̫̰͙͚͋͋̓́̇͟V ͐̇͞ ̓̿̔̿̓ ͒̚ ͟ ̨̭̳̱͕ ̵i ͒̅̉͊̌̇ ̡͓̰̲̳͟ ̥̯ ̯̦ę͕͔͉̜̗͔͎ ̔̍̀̏̌̕ ͢ ͟ w ̛͊͆̍͑ ̴̯̯̻̪̦

Slide 18

Slide 18 text

? C++ ObjC++ JavaScript TypeScript iOS !" JavaScriptCore Android !"

Slide 19

Slide 19 text

THE ALGORITHM™ C++ ObjC++ JavaScript TypeScript Kotlin @fbecart Florent Bécart

Slide 20

Slide 20 text

multi-platform

Slide 21

Slide 21 text

header impl (before 1.2) -Xmulti-platform

Slide 22

Slide 22 text

header impl (before 1.2) -Xmulti-platform

Slide 23

Slide 23 text

expect actual (from 1.2) -Xmulti-platform

Slide 24

Slide 24 text

ANDROID WebView iOS JavaScriptCore BACKEND JS legacy.js

Slide 25

Slide 25 text

legacy-test.js ANDROID WebView iOS JavaScriptCore BACKEND JS legacy.js shared-test.kt shared.kt

Slide 26

Slide 26 text

legacy-test.js ANDROID WebView iOS JavaScriptCore BACKEND JS legacy.js shared-test.kt shared.kt

Slide 27

Slide 27 text

legacy-test.js ANDROID WebView iOS JavaScriptCore BACKEND JS legacy.js shared-test.kt shared.kt

Slide 28

Slide 28 text

legacy-test.js ANDROID WebView iOS JavaScriptCore BACKEND JS legacy.js shared.kt shared-test.kt

Slide 29

Slide 29 text

legacy-test.js ANDROID WebView iOS JavaScriptCore BACKEND JS shared.kt shared-test.kt JVM

Slide 30

Slide 30 text

/** * A day number, offset from 01/01/2012 !" export type Day = number

Slide 31

Slide 31 text

/** * A day number, offset from 01/01/2012 !" typealias Day = Int

Slide 32

Slide 32 text

class Value { constructor(value: Double) { this.value = value } val value: Double override fun toString(): String { return this.value.toString() } companion object { fun add(v1: Value, v2: Value): Value { return Value(v1.value + v2.value) } fun isZero(valueWithVariance: Value): Boolean { return .0 !!% valueWithVariance.value } fun subtract(v1: Value?, v2: Value?): Value { var value = .0 if (v1 !' null !& v2 !' null) { value = v1.value - v2.value } return Value(value) } } } export class Value { constructor(value) { this.value = value } readonly value: number toString() { return String(this.value) } static add = (v1: Value, v2: Value): Value !$ { return new Value(v1.value + v2.value) } static isZero = (valueWithVariance: Value): boolean !$ { return 0 !!% valueWithVariance.value } static subtract = (v1: Value, v2: Value): Value !$ { let value = 0 if (v1 !& v2) { value = v1.value - v2.value } return new Value(value) } }

Slide 33

Slide 33 text

< insert more talking here >

Slide 34

Slide 34 text

Eugenio Marletti @workingkills BIT.LY/SHARING-KOTLIN-IS-CARING