Slide 1

Slide 1 text

Kotlin or The Quest For Java.Next [email protected]

Slide 2

Slide 2 text

Java.Next ? ? ?

Slide 3

Slide 3 text

JRuby? Jython? Groovy?

Slide 4

Slide 4 text

Clojure?

Slide 5

Slide 5 text

Gosu? Fantom? Mirah?

Slide 6

Slide 6 text

Scala?

Slide 7

Slide 7 text

Ceylon?

Slide 8

Slide 8 text

Xtend?

Slide 9

Slide 9 text

Kotlin?

Slide 10

Slide 10 text

Java 8?

Slide 11

Slide 11 text

Java 8!

Slide 12

Slide 12 text

However...

Slide 13

Slide 13 text

I think that Kotlin is a pretty good one

Slide 14

Slide 14 text

kotlin.jetbrains.org kotlin-demo.jetbrains.com

Slide 15

Slide 15 text

Hello, world! package _01hello fun main(args: Array) { println("Hello, world!") }

Slide 16

Slide 16 text

Classes package _02classes class Person1(name: String) { val name: String { this.name = name } }

Slide 17

Slide 17 text

Classes package _02classes class Person2(name: String) { val name: String = name }

Slide 18

Slide 18 text

Classes package _02classes class Person3(val name: String) fun main(args: Array) { val person = Person3("Ladislav Thon") println(person) }

Slide 19

Slide 19 text

Classes package _02classes data class Person4(val name: String) fun main(args: Array) { val person = Person4("Ladislav Thon") println(person) }

Slide 20

Slide 20 text

Traits package _03traits trait Foo { fun foo(): String } trait Bar { fun bar() = "bar" }

Slide 21

Slide 21 text

Traits package _03traits class Fubar : Foo, Bar { override fun foo() = "foo" fun fubar() { println("${foo()}-${bar()}") } }

Slide 22

Slide 22 text

Multiple Inheritance? ● single inheritance + interfaces ○ Java <= 7, C# ● stateless traits ○ Kotlin, Ceylon, Java 8 (kind of…) ● stateful traits ○ PHP >= 5.4 (I think…) ● mixins ○ Scala, Dart ● full multiple inheritance ○ C++

Slide 23

Slide 23 text

Null Safety & Smart Casts package _04nullSafety fun main(args: Array) { val maybeAnswer: Int? = ... if (maybeAnswer != null) { val answer: Int = maybeAnswer } }

Slide 24

Slide 24 text

Null Safety & Safe Navigation & Elvis package _04nullSafety fun main(args: Array) { val answer: Int? = … val doubleAnswer = answer?.let { it * 2 } answer?.times { println("Hi!") } val question = answer ?: 42 }

Slide 25

Slide 25 text

Collections package _05collections fun print(nums: Collection) { println(nums) } fun add(nums: MutableCollection) { nums.add(4) }

Slide 26

Slide 26 text

Generics package _06generics trait Producer { fun produce(): T } trait Consumer{ fun consume(t: T) }

Slide 27

Slide 27 text

Generics package _06generics trait Holder { fun produce(): T fun consume(t: T) } fun use(h: Holder) { h.produce() }

Slide 28

Slide 28 text

Extension Methods package _07extensions fun String.pirateStyle() = "Arrr! ${this.capitalize()}" fun main(args: Array) { println("hello, world".pirateStyle()) }

Slide 29

Slide 29 text

Lambdas package _08lambdas fun main(args: Array) { val nums = arrayListOf(1, 2, 3, 4, 5, 6, 7) .filter { it % 2 == 0 } .flatMap { listOf(it, it * 2, it * 3) } .takeWhile { it < 10 } println(nums) }

Slide 30

Slide 30 text

Lambdas package _08lambdas fun Lock.locked(compute: () -> T): T { this.lock() try { return compute() } finally { this.unlock() } }

Slide 31

Slide 31 text

Delegation package _09delegation class MyList(val l: List) : List by l fun main(args: Array) { val list = MyList(listOf("a, b, c")) list.forEach { println(it) } }

Slide 32

Slide 32 text

Delegation package _09delegation class LazyString { val value: String by Delegates.lazy { println("heavy computation") "the string!" } }

Slide 33

Slide 33 text

Builders & DSL support package _10builders fun data(build: Data.() -> Unit): Data { val result = Data() result.build() return result }

Slide 34

Slide 34 text

kotlin.jetbrains.org kotlin-demo.jetbrains.com

Slide 35

Slide 35 text

? http://devconf.cz/f/83 [email protected]