Kotlin

C'est maintenant

Kotlin, c'est quoi?

  • Un nouveau langage de programmation créé par JetBrains
  • Typage statique
  • Pour la JVM et le navigateur (JavaScript)
  • Open-source avec contributions de la communauté
  • Interoperabilité Java complète
    generics, surcharges, arrays, primitives...
  • Compilation et runtime aussi performants que Java

Hello World

package hello        


fun main(args: Array<String>): Unit {
    println("Hello, world!")
}

Classes

class User(val name: String,     
           val age: Int) {
    
    fun fullName() = "$name, age $age"
    
}

println(User("John Doe", 30).fullName())

Traits

trait StuffContainer {
  fun isEmpty(): Boolean    
  fun containsStuff(): Boolean = !isEmpty()
}

class MyList<T>() : ArrayList<T>(), StuffContainer

val list = MyList<String>()
list.add("foo")
println(list.containsStuff())

Extension Functions

fun String.iterator() = StringIterator(this)
  

class StringIterator(val s: String) : Iterator<Char> {
    private var i = 0
    public override fun next(): Char = s[i++]
    public override val hasNext: Boolean
        get() = i < s.size    
}

for (c in "abcd") {  
    println(c)
}

Function Literals

val users = arrayList(
        User("John Doe", 30),
        User("Jane Doe", 27)) 

val ages = users.map { it.age }
println("Youngest user is ${ages.min()} years old")

Pattern Matching et Smart Casts

trait Expr
class Number(val value: Int): Expr
class Sum(val left: Expr, val right: Expr): Expr
class Mult(val left: Expr, val right: Expr): Expr

fun eval(e: Expr): Int = when(e) {
    is Number -> e.value
    is Sum -> eval(e.left) + eval(e.right)
    is Mult -> eval(e.left) * eval(e.right)
    else -> throw IllegalArgumentException("Can't eval $e")
}

Déjà en production

  • prezi.com : 30 millions d'utilisateurs
  • Wrestler Unstoppable : jeu facebook 10k utilisateurs / jour

Q&A

/

#