Ein Überblick über Java-Alternativen für den industriellen Einsatz

Seite 4: Kotlin

Inhaltsverzeichnis

Wenn jemand Erfahrung im Umgang mit JVM-basierten Programmiersprachen hat, dann JetBrains. Als Hersteller zahlreicher Entwicklungsumgebung für die unterschiedlichsten Sprachen hat die tschechische Softwareschmiede eine beachtliche Java-Codebasis aufzuweisen. Daher stellt das für den industriellen Einsatz vorgesehene Kotlin von Beginn an exzellente Java-Interoperabilität, eine gute Tool-Unterstützung, Performance sowie das richtige Maß an Abstraktion für eine ausdrucksstarke und dennoch gut lesbare und sichere Sprache an oberste Stelle.

Der Fokus auf Robustheit zeigt sich auch in der Roadmap: "It's ready when it's done" ist die erklärte Devise für die seit 2010 laufende Entwicklung. So setzt man auf eine ausführliche Beta-Phase samt intensiver Nutzung im eigenen Hause, bevor Kotlin den Status einer stabilen 1.0 erhalten soll. Der aktuelle Meilenstein M6.2 hat bereits durchaus eine produktionstaugliche Reife erlangt und bringt zudem Support für Googles neues Android Studio mit.

Naturgemäß wird die Entwicklung vorrangig durch JetBrains selbst vorangetrieben, jedoch ist das Projekt offen gegenüber Anregungen und Code-Beiträgen neuer "Kontributoren". Dem Firmenhintergrund ist wohl auch das große Momentum in der Entwicklung zuzurechnen. So kann Kotlin bereits mit einer überdurchschnittlich guten IDE-Integration in das Hausprodukt IntelliJ IDEA aufwarten. Kotlin steht, wie auch die Open-Source-Variante der Entwicklungsumgebung, vollständig unter der freien Apache-Lizenz. Ein Eclipse-Plug-in ist vorerst nur in Aussicht gestellt.

Beim Entwurf der Sprache folgte man unverkennbar einem pragmatischen Ansatz und griff sich als eine noch eher junge Sprache einfach die besten Aspekte der Mitbewerber heraus. So findet man etwa die bekannten Traits aus Scala wieder. Aus der .NET-Welt sind Extension Methods bekannt, mit denen sich eigene Methoden an fremde Klassen hängen lassen. Zusammen mit einer Literale nutzenden Kurzschreibweise lassen sich damit die aus Groovy bekannten Builder für eigene domänenspezifische Sprachen (DSL) realisieren, die zudem typsicher sind.

Wie alle hier vorgestellten Sprachen bringt auch Kotlin eine eigene Laufzeit-Bibliothek mit. Statt aber zum Beispiel das Collections-Framework von Java durch eigene Implementierungen zu ersetzen, nutzt und ergänzt sie diese. Damit gestaltet sich die Integration mit Java-Bibliotheken unvergleichbar nahtlos.

Die NullPointerException dürfte in typischen Java-Anwendungen unangefochtener Spitzenreiter als Auslöser vieler Fehlerberichte sein. Hier bietet Kotlin eine elegante und sichere Lösung: Die Sprache unterscheidet explizit zwischen optionalen Typen, die null enthalten dürfen, und den normalen Typen mit Pflichtwert. Ungeprüfte Dereferenzierungen auf optionale Typen meckert der Compiler an.

Deshalb müssen die potenziellen Fehlerpfade stets überprüft und behandelt werden. Der Umgang mit diesen optionalen Werten stellt sich im weiteren Verlauf aber als erstaunlich komfortabel dar. So erkennt Kotlin zum Beispiel umschließende Null-Prüfungen und überführt mittels Smart Cast den Wert automatisch in den Null-freien Typ. Mittels Kurzschreibweisen entfallen auch viele der sonst unter Java mühsamen und länglichen if/else-Blöcke für die Null-Behandlung zugunsten weniger zusätzlicher Zeichen.

fun GeneralNullsafety() {

//val o: String = null // Compilerfehler
val s: String? = null

//s.hashCode() // Compilerfehler
s?.hashCode() // Safecall

if (s != null) { // Smart cast:
s.hashCode() // String? -> String
}

// null-Alternativwert via Elvis-Operator ?:
val r = s?.substring(2) ?: "n/a"
r.hashCode()
}

Beim Aufruf von Java-Code nimmt Kotlin für Rückgabewerte erst einmal stets optionale Typen an. Mit dem KAnnotator gibt es jedoch ein Werkzeug, das über statische Bytecode-Analyse versucht, jene Stellen zu identifizieren, bei denen die Rückgabe eines Wertes garantiert ist. So lassen sich auch Java-Klassen komfortabel verwenden, ohne Gefahr zu laufen, sich die neuralgische Fehlerquelle wieder neu einzufangen.

Daneben kann Kotlin noch weitere interessante Sprachmerkmale bieten, etwa die sogenannten Delegated Properties. Wer hier mehr sehen will, wirft am besten einen Blick auf die Online-Demo, in der sich Code-Beispiele verändern und durch die Option, nach JavaScript zu übersetzen, nativ im Browser ausführen lassen.