Kotlin: de Java killer?

2018-08-20

Kotlin in het kort

Kotlin is een relatief nieuwe programmeertaal, ontworpen door Jetbrains. Aangezien het een JVM variant is (de taal compileert naar JVM bytecode) concurreert het met onder andere Scala, Clojure, Groovy, Ceylon en natuurlijk Java. Hierdoor kun je dan ook naast de Kotlin libraries gebruik blijven maken van Java libraries.

Maar omdat er ook een Javascript transpiler is, concurreert de taal ook met onder andere Typescript, Dart, Coffeescript, Actionscript en Javascript. Dat is een slimme zet van Jetbrains, omdat daarmee Kotlin – net als Javascript – in zowel frontend (browsers) als backend (NodeJs) kan draaien. Ideaal als je in een later ontwikkelstadium kunt bepalen om code te migreren van de backend naar de frontend of andersom!

Ik licht nu een aantal goodies uit.

Een aantal features uitgelicht

Dataclasses

Een dataclass is een fenomeen dat we steeds vaker (gaan) zien. Scala had ze al (case classes), C# (records), Python (sinds 3.7) en misschien Java in een toekomstige release.

Hieronder zie je hoe een data class er in Kotlin uitziet.

data class Person(val name: String, val age: Int)


Meer is het niet. Geen getters en setters meer, of leunen op code generatie van je IDE. En ook project Lombok: So Long, and Thanks for All the Fish!

Functions

Inderdaad, functions. En met functions bedoel ik dus geen methods.

// Een function begint met ‘fun’. Types schrijf je achteraan.
fun sum(i1: Int, i2: Int): Int {

  return i1 + i2

}


Dit kan korter. Functions met slechts 1 expressie (oneliners) kun je zonder accolades schrijven. En types hoeven niet altijd uitgeschreven te worden.

// Het return type wordt automatisch bepaald: Int + Int = Int.
fun sum(i1: Int, i2: Int) = i1 + i2

 

Extensions

Je kunt functions ook aan bestaande classes knopen. Je noemt deze dan ‘extension functions’.

fun int.flip() = this * -1

 

val flipped = 100.flip()

// flipped is nu -100

 

Mooie feature, maar een gevaar voor onleesbare code zul je denken. Dat was in elk geval mijn eerste gedachte. Maar aan de andere kant: dit is 2018, iedereen gebruikt een IDE die jou naar de implementatie van een extension kan brengen in een simpele muisklik.

Alles is een expression

In Kotlin is alles dat je schrijft een expression. Dit kan handige constructies opleveren, bijvoorbeeld in combinatie met oneliner functions. Maar het zorgt er bijvoorbeeld ook voor dat er geen ternary operator nodig is.

val b = if (a == 1) “1” else “2”

 

Prima toch, zo?

En nog veel meer…

Om nog een aantal features toe te voegen:

* Type inference (types kunnen worden afgeleid, je hoeft ze niet altijd uit te schrijven)

* Default parameters en named parameters (yes!)

* Hogere orde functions (functioneel programmeren in Kotlin? Check!)

* Property comparison (vergelijken op basis van attributes in plaats van object pointers)

* Properties (in plaats van getters en setters)

* String interpolation (variabelen eenvoudig in strings drukken)

* Infix notation (syntactic sugar, maar zorgt voor leesbaarheid)

* Closures (het is de 21e eeuw)

 

Conclusie

Kotlin is duidelijk een moderne taal: het biedt functionaliteit die we ook in de meeste serieuze programmeertalen zien verschijnen. Hoewel ik nog toe geen nieuwe constructies heb gezien (ik zie dat er geleend is van Java, Scala, Python, Javascript), vind ik de implementatie van Kotlin mooi. Het is duidelijk dat deze taal op Java voorloopt.

Of Kotlin een Java killer is, dat durf ik nu nog niet te zeggen. Wellicht dat het net als Scala een voorbeeld voor Java gaat zijn.

Hoe het ook zij, ik ben er enthousiast over en hopelijk jij nu ook!


Bekijk alle posts van Ramon