Programmiersprache: Kotlin 1.4 erweitert die Toolchain und einige Sprachelemente

Neben einem Debugger für Koroutinen bringt das Release einen Projektassistenten mit. Außerdem erlaubt es Lambda-Umsetzungen für Kotlin-Interfaces.

In Pocket speichern vorlesen Druckansicht
Programmiersprache: Kotlin 1.4 erweitert die Toolchain und einige Sprachelemente
Lesezeit: 6 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

JetBrains hat Version 1.4 der Programmiersprache Kotlin veröffentlicht. Für das Release haben sich die Entwickler vor allem auf die Toolchain inklusive der Integration in Entwicklungsumgebungen konzentriert. Es führt im Zusammenspiel mit der ebenfalls von JetBrains stammenden Entwicklungsumgebung IntelliJ IDEA einen Debugger für Koroutinen ein und hat einen Project Wizard für neue Kotlin-Projekte an Bord. Daneben gibt es ein paar neue Sprachfeatures, die vor allem auf mehr Komfort und Stabilität zielen.

Für das Zusammenspiel mit Entwicklungsumgebungen spricht der Blogbeitrag von 60 behobenen Performance-Problemen, von denen einige zum Einfrieren der IDE oder zu Speicherlecks führen konnten. Bei großen Projekten soll zudem die farbliche Syntaxhervorhebung beim Öffnen eineinhalb bis viermal schneller vonstatten gehen.

Koroutinen kennt Kotlin zwar bereits seit der Anfang 2017 veröffentlichten Version 1.1, als stabil gelten sie jedoch erst seit dem Ende 2018 erschienen Kotlin 1.3. Sie ermöglichen es, nichtblockierenden asynchronen Code zu schreiben. Vereinfacht ausgedrückt können Koroutinen ihren Ablauf unterbrechen, wenn sie beispielsweise auf die Übertragung einer Datei über das Netzwerk warten, ohne dabei den aktiven Thread zu blockieren.

Damit sind jedoch zusätzliche Herausforderungen bei der Fehlersuche verbunden, da die Koroutinen zwischen Threads hin und her springen können. Kotlin 1.4 hat nun einen Debugger für Koroutinen an Bord, und das Plug-in für IntelliJ IDEA zeigt beim Debuggen einen zusätzliche Tab mit Informationen über den Status der einzelnen Koroutinen an.

IntelliJ IDEA zeigt mit dem Kotlin-Plug-in beim Debuggen einen zusätzlichen Tab für Koroutinen.

(Bild: JetBrains)

Das aktuelle Release erweitert zudem den Compiler, der nun alle Zielplattform einheitlich bedienen können soll. Über eine API lassen sich Compiler-Erweiterungen anbinden. Außerdem wird es mittelfristig für Kotlin/JS und Kotlin/JVM ein einheitliches Backend für den Zwischencode (Intermediate Representation, IR) geben, das im aktuellen Release noch als Alpha gekennzeichnet ist.

Für IntelliJ IDEA bringt Kotlin 1.4 zudem einen neuen Projektassistenten mit, der einige Vorlagen zu typischen Anwendungen für die Java Virtual Machine (JVM), Kotlin/JS (JavaScript) oder Multiplattformprojekte bietet. Neben der benötigten JVM-Version lassen sich im Project Wizard das genutzte Build-System sowie ein Testing-Framework wie JUnit festlegen.

Bei den sprachlichen Neuerungen ist unter anderem die Umsetzung von SAM-Interfaces (Single Abstract Method) nennenswert, die in Kotlin auch funktionale Interfaces heißen und durch fun gekennzeichnet sind. Dabei handelt es sich um Interfaces, die genau eine abstrakte Funktion haben. Sie dürfen daneben beliebig viele weitere nicht abstrakte Methoden aufweisen, aber es darf getreu dem Namen "Single Abstract Method" nur eine abstrakt sein.

Bei der SAM Conversion, also dem Umsetzen der abstrakten Funktion in konkreten Klassen, lassen sich nun auch für in Kotlin definierte funktionale Interfaces Lambdas statt override-Blöcke verwenden. Die SAM Conversion war bisher lediglich für Java-Interfaces erlaubt, nicht aber für solche, die in Kotlin geschrieben sind.

Die Umsetzung als Lambda ist deutlich kürzer und übersichtlicher, wie folgendes Beispiel aus der Kotlin-Dokumentation zeigt:

// funktionales Interface (SAM-Interface)
fun interface IntPredicate {
   fun accept(i: Int): Boolean
}

// Herk�mmliche Instanziierung einer Klasse mit override
val isEven = object : IntPredicate {
   override fun accept(i: Int): Boolean {
       return i % 2 == 0
   }
}

// Dieselbe Funktionsweise �ber SAM Conversion
val isEven = IntPredicate { it % 2 == 0 }

Zwei weitere Ergänzungen der Programmiersprache sind vor allem als syntaktischer Zucker zu betrachten. Zum entfällt für Parameterlisten, die Parameter mit und ohne Name enthalten, die Einschränkung, dass diejenigen ohne Namen am Anfang stehen müssen. Bisher war zwar f(1, y = 2) erlaubt, aber nicht f(x = 1, 2). In Kotlin 1.4 dürfen die Parameter unabhängig davon, ob sie einen Namen bekommen, beliebig verteilt sein. Freilich müssen sie in der korrekten Reihenfolge stehen.

Eine weitere nette Ergänzung, die es in zahlreichen anderen Sprachen gibt, sind die sogenannten Trailing Commas für diverse Aufzählungen wie die Parameter einer Funktion oder Listen:

val colors = listOf(
    "rot",
    "blau",
    "gelb", //trailing comma
)

Sie sind vor allem nützlich, um die Listen einfach zu erweitern oder Elemente zu vertauschen, ohne Kommas löschen oder einfügen zu müssen.

An Library-Entwickler richtet sich der mit Kotlin 1.4 eingeführte explizite API-Mode, der dabei helfen soll, die Schnittstellen der Bibliothek nach außen möglichst deutlich und konsistent darzustellen. Der Modus verlangt Kennzeichnungen für Deklarationen, die in der öffentlichen API verfügbar sind und explizite Typspezifikationen für über die öffentliche API zugreifbare Properties und Funktionen.

Der Compiler spuckt je nach Konfiguration Fehlermeldungen oder Warnungen aus, wenn entsprechende Deklarationen fehlen. Ausgenommen sind einige Elemente wie der Hauptkonstruktor oder die Getter und Setter von Properties.

Ursprünglich hatte JetBrains die Programmiersprache als Alternative zu Java ins Rennen geschickt. In den Anfängen war die Sprache auch auf die JVM begrenzt. Besonders auf Android hat sie einen Siegeszug angetreten, seit Google sie 2017 offiziell als Alternative zu Java auch in Android Studio aufgenommen hat. Inzwischen ist die Programmiersprache aber auf diverse Plattformen ausgelegt: Kotlin/Native ermöglicht die Ausführung ohne virtuelle Maschine, vor allem um Plattformen wie iOS abzudecken, die von Haus aus keine JVM an Bord haben.

Mit Kotlin/JS ist zudem eine Anbindung an JavaScript verfügbar, und seit Kotlin 1.2 lassen sich Multiplattformprojekte erstellen, die mit einer Codebasis JVM und JavaScript abdecken. Den Namen, der hierzulande gerne Trolle in Foren anzieht, verdankt die Sprache einer Insel vor St. Petersburg. Das dortige JetBrains-Team hat die Sprache anfänglich maßgeblich entwickelt.

Weitere Neuerungen in Kotlin 1.4 lassen sich dem Kotlin-Blog entnehmen. Die Entwicklungsumgebung IntelliJ IDEA sowie das darauf basierende Android Studio sollten das aktuelle Release der Sprache automatisch laden. Die interaktive Kotlin-Spielwiese im Browser ist ebenfalls auf das aktuelle Release aktualisiert.

(rme)