Was zeichnet die neue Sprache von JetBrains aus und was bringt sie Entwicklern?

Kotlin – das pragmatische Java
Kommentare

Kotlin ist eine Programmiersprache für die Java Virtual Machine (JVM) von JetBrains, dem tschechischen Softwareunternehmen hinter IntelliJ IDEA sowie vielen weiteren IDEs und Entwicklungstools. Der Name ist insofern eine Anspielung auf „Java“, als dass Kotlin auch eine Insel nahe Sankt Petersburg ist. Dort sitzt ein Teil des Teams, das für JetBrains an Kotlin arbeitet.

Was macht Kotlin aus? Auf den ersten Blick fühlt man sich erinnert an andere Sprachen wie Scala, Groovy und Java. Kotlin macht nichts Verrücktes, es ist eine pragmatische Programmiersprache, entstanden aus den praktischen Bedürfnissen von JetBrains.

Die Sprache, die Java-Interoperabilität als ein wesentliches Designziel für sich beansprucht, ist noch jung. Da liegt es auf der Hand, dass viele Jahre der Softwareentwicklung in Java nicht über Nacht durch Kotlin-Code ersetzt werden können. Das empfohlene Vorgehen ist vielmehr, neue Module in Kotlin zu schreiben und andere Schritt für Schritt umzustellen, wenn diese refaktoriert werden.

Kotlin verspricht: Eine Variable enthält keinen „null“-Wert

Ein wesentliches Feature von Kotlin ist die Zusicherung, dass eine Variable keinen „null“-Wert enthält. Das erspart „if not null“-Abfragen. Mit „Optional“ bietet Java 8 auf den ersten Blick ein vergleichbares Feature, allerdings mit dem Unterschied, dass „Optional“ rein auf Konvention basiert. Entwickler müssen „Optional“ nicht verwenden, aber sie müssen in Kotlin explizit einen „nullbaren“ Typ benutzen, wenn „null“ ein gültiger Wert sein soll. Diese Eigenschaft wird durch ein Fragezeichen am Ende des Typs ausgedrückt. Damit ist dem Benutzer des API klar, dass er mit einem möglichen „null“-Wert umgehen muss. Diese Sicherheit gilt allerdings nur für Code, der in Kotlin geschriebenen ist. Wenn dagegen eine in Java geschriebene Bibliothek verwendet wird, muss damit gerechnet werden, dass „null“-Werte vorkommen (Listing 1).

import java.util.*

// Funktionen aus externer API
fun mayBeNull(): Boolean? = if (Random().nextBoolean()) true else null
fun neverNull(): Boolean = true

fun main(args: Array<String>) {
    val x: Boolean? = mayBeNull()
    x?.and(true) // Sicherer Aufruf
    x?.let {
        println("Block wird nur ausgeführt wenn x nicht null ist")
    }

    val y: Boolean = neverNull()
    y.and(false)
}

Ausdrucksstärke, Prägnanz und weitere Vorteile

Dass Kotlin prägnanter als Java ist, lässt sich anhand einiger Beispiele zeigen, wobei diese bei weitem nicht erschöpfend sind.

Semikolons am Ende von Statements sind optional, so wie in vielen modernen Sprachen. Die Reihenfolge von Datentyp und Bezeichner wurde im Gegensatz zu Java getauscht und folgt nun dem Konzept, das von anderen modernen Sprachen wie Scala und Go verwendet wird. An vielen Stellen kann darauf verzichtet werden, den Typ einer Variablen anzugeben. Für veränderliche Werte gibt es das Schlüsselwort „var“, für unveränderliche Werte „val“.

Extension Functions erlauben es, bestehende Klassen um weitere Funktionalitäten zu erweitern. Das ist vor allem dann praktisch, wenn man einer Klasse, die man selbst nicht kontrolliert, eine Funktion hinzufügen möchte. In Java wird üblicherweise mit Utility-Klassen gearbeitet, die statische Methoden enthalten. In Kotlin ist es möglich, eine Funktion zu schreiben, die auf dem Objekt der Klasse String aufgerufen werden kann. Im Beispiel ist das für eine triviale isPalindrome()-Funktion für String zu sehen (Listing 2).

 
fun String.isPalindrome(): Boolean {
    return this == this.reversed()
}

fun main(args: Array<String>) {
    assert(!"foo".isPalindrome())
    assert("abba".isPalindrome())
}

Ein weiteres Beispiel dafür, dass Kotlin prägnanter ist als Java, sind data-Klassen. Scala-erfahrene Entwickler kennen das Konzept unter dem Namen case-Klasse, Lombok-Anhänger kennen die @Data-Annotation. Für diese Klassen werden equals(), toString() und hashCode() automatisch erzeugt. Das erspart es dem Entwickler, trivialen Code von der IDE erzeugen zu lassen (Listing 3).

 
data class Customer(val name: String, val email: String)

fun main(args: Array<String>) {
    val c1 = Customer("Kim", "kim@example.com")
    val c2 = Customer("Kim", "kim@example.com")
    val c3 = Customer("Kim", "kim@kim.de")

    assert(c1 == c2)
    assert(c1 != c3)
}

Deshalb wird Kotlin immer beliebter

Dass Kotlin in der Industrie ankommt, wird u. a. an der Unterstützung durch das Spring-Framework deutlich. Beim Spring Initializer kann Kotlin neben Java und Groovy als Sprache ausgewählt werden. Zudem wird für Spring 5.0 aktiv an besserer Unterstützung für Kotlin gearbeitet. Ein weiterer Beleg ist die offizielle Unterstützung durch Google als Programmiersprache für Android, die auf der Entwicklerkonferenz Google I/O im Mai 2017 angekündigt wurde.

Domänenspezifische Sprachen sind ein weiteres Anwendungsgebiet. Gradle bietet eine Build-Beschreibungssprache, die auf Groovy basiert. Seit Version 3.0 ist alternativ auch eine Kotlin-basierte Sprache verfügbar. Diese bietet die Aussicht auf bessere Unterstützung in der Entwicklungsumgebung, ist aber momentan noch im Entstehungsprozess. Informationen zum aktuellen Projektfortschritt sind auf der Projektseite verfügbar.

So lernen Interessierte Kotlin kennen

Wer Kotlin ausprobieren möchte, kann das auf verschiedene Arten tun:

Im browserbasierten Kotlin Online-Editor sind Beispiele und Übungen verfügbar, die ein Gefühl für die Sprache vermitteln.

Nutzer von IntelliJ IDEA können ein Kotlin-Projekt anlegen. Die IDE konvertiert sogar Java-Code nach Kotlin, wenn er in eine Kotlin-Quellcode-Datei kopiert wird. Diese automatische Konvertierung ist zwar nicht perfekt, erspart dem Nutzer aber viel Fleißarbeit.

API Summit 2017

Web-APIs mit Java: REST ist nur der Anfang

mit Stephan Müller (Open Knowledge)

API First mit Swagger & Co.

mit Thilo Frotscher (Freiberufler)

Auf dem Weg zu einer eigenständigen Programmiersprache – ein Fazit

Gut ist: Kotlin ist keine Revolution und soll nicht die am Reißbrett entwickelte „perfekte“ Programmiersprache sein. Vielmehr ist Kotlin eine pragmatische Weiterentwicklung von Java, die Java aufgrund von Rückwärtskompatibilität nur zum Teil nachvollziehen kann. In Kotlin finden sich viele gute Ansätze aus Groovy und Scala, wodurch die Java-Plattform gestärkt wird. Der starke Fokus von Kotlin auf Interoperabilität mit Java-Code ist der richtige Ansatz, um eine neue Sprache zu etablieren. So kann Schritt für Schritt eine bestehende Codebasis auf die neue Sprache umgestellt und dabei refaktoriert werden.

Weiter Literaturtipps und Ressourcen:

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -