Suche
Kotlin für die Java-Entwicklung

Kotlin 1.1.1 erschienen: Erstes Bugfix Update für Version 1.1

Redaktion JAXenter

Kotlin ist seit der Einführung der Version 1.0 eines der heißesten Eisen im Pool der JVM-Sprachen. Die statisch typisierte Sprache aus dem Hause JetBrains soll voll kompatibel zu Java-Anwendungen sein und über eine erstklassige Integration in IntelliJ IDEA verfügen. Zudem hat sie sich als Java-Alternative zur Entwicklung von Android-Apps ins Spiel gebracht.

In diesem Beitrag halten wir Sie über alle Entwicklungen, Meilensteine und Updates für Kotlin auf dem Laufenden.

Update vom 15.03.2017

Kotlin 1.1.1: Inkorrekte Code-Generation gefixt

Keine zwei Wochen ist es her, seit Kotlin 1.1 veröffentlicht wurde. Mit dem nun erscheinenden Bugfix-Release behebt JetBrains einige kritische Fehler bei der Code-Generation, die der Grund für das schnelle Veröffentlichen von Kotlin 1.1.1 sind. Im Zuge dessen wurden auch die Plug-ins für Eclipse und NetBeans aktualisiert.

Außerdem sind Plug-ins für Kotlin nun über das Gradle Plug-in Portal verfügbar. Wie genau man diese nutzt, wird in der entsprechenden Dokumentation deutlich. Ebenfalls in Bezug auf Gradle bringt das Update die standardmäßige Aktivierung der inkrementellen Kompilierung von Gradle mit sich. In der oben erwähnten Dokumentation wird gezeigt, wie man sie auch wieder abstellen kann.

Mit Kotlin 1.1.1 ist es nicht mehr möglich, Function Types mit Receivern als Parameter Types von externen JavaScript-Deklarationen zu verwenden. Bislang wurden Lambdas, die zu solchen Parametern weitergegeben wurden, nicht mit den korrekten Argumenten aufgerufen. Da hierzu kein leichtes Workaround zu finden war, hat sich das Kotlin-Team entschieden, die Funktionalität zu deaktivieren.

Weitere Informationen zum aktuellen Update gibt es wie immer auf dem Blog von JetBrains, außerdem kann man die gesamten Release Notes auf GitHub einsehen.



Update vom 02.03.2017

Kotlin 1.1 – Finales Release endlich verfügbar

Seit dem ersten Ausblick auf Kotlin 1.1 vor exakt neun Monaten ist viel passiert, wie unser Update-Thread zeigt. Während die Arbeit der Kotlin-Entwickler aus dem Hause JetBrains zur Verbesserung der JVM-Sprache kontinuierlich weiterging, wurde gleichzeitig bereits am Nachfolger gefeilt. Dieser ist nun veröffentlicht und wartet mit zwei großen neuen Features auf. Diese sollen Kotlin, so Roman Belo auf dem Blog von JetBrains, für viele neue Szenarien interessant machen.

Coroutines

Der erste große Schritt in Richtung einer Sprache, die über alle Teile einer modernen Applikation hinweg Anwendung findet, ist die Einführung von Coroutines. Kotlin 1.1 beinhaltet die Unterstützung für diese leichtgewichtigen Thread-Alternativen, die das Erstellen skalierbarerer Anwendungs-Backends erlauben. Durch Coroutines werden massive Workloads auf einer einzigen JVM-Instanz möglich. Außerdem sind sie ein sehr expressives Werkzeug, um asynchrone Verhaltensweisen zu implementieren – wichtig ist dies etwa für responsive Benutzeroberflächen auf allen Plattformen.

Achtung! Obwohl die Coroutines in Kotlin nun als „fertiges Feature“ angesehen werden, ist dieses Design doch relativ neu und möglicherweise fehleranfällig. Das Kotlin-Team bittet die Nutzer daher um Verständnis, dass die Coroutines noch als experimentelles Features geführt werden. Die Sprachregeln von Kotlin sollten sich in Bezug darauf nicht mehr ändern, aber es könnte sein, dass das API für Kotlin 1.2 noch ein wenig angepasst werden muss.

JavaScript

Nicht mehr experimentell ist dagegen das JavaScript Target, das sämtliche Kotlin Sprachfeatures sowie einen großen Teil der Standard-Library unterstützt. Dazu gehören unter anderem auch die oben erwähnten Coroutines. Die JavaScript-Interoperabilität ist mit Kotlin 1.1 möglich, sodass Entwickler das Browser-Frontend ihrer Anwendungen nach Kotlin migrieren können, ohne auf ein modernes JavaScript Entwicklungsframework zu verzichten (etwa React).

Für die Interoperabilität zwischen Kotlin und JavaScript sorgen Dynamic Types, die mit dem „nativen“ JavaScript-Code interagieren. Um bekannte Bibliotheken durch typisierte APIs nutzen zu können, kann man den ts2kt Converter in Verbindung mit Headern von Definitely Typed verwenden. Unterstützt werden zudem Node.js und der Browser selbst, die Kotlin Standardbibliothek kann über npm genutzt werden.

Hintergrund & Ausblick

Die Veröffentlichung des aktuellen Major Releases motivierte das Team von Kotlin, einen Blick auf die Adaption von Kotlin zu werfen. Die Tendenz ist dabei durchweg positiv: über 160.000 Nutzer hatte die JVM-Sprache im vergangenen Jahr. Die Anzahl an Codezeilen in GitHub ist im gleichen Zeitraum von 2.4 Millionen auf 10 Millionen gewachsen. In Slack verzeichnet die Community zudem einen Zuwachs von 1.400 auf 5.700 Personen und es gab zahlreiche Meetups.

Zahlen lügen auch bei Kotlin nicht / Quelle: JetBrains Blog

Zahlen lügen auch bei Kotlin nicht / Quelle: JetBrains Blog

Etwa die Hälfte der Entwickler, die Kotlin nutzen, sind im Server-seitigen Umfeld daheim, die andere Hälfte schreibt Anwendungen für Android. Neben Spring unterstützt auch Vert.x Kotlin nun nativ; Gradle und TeamCity verwenden Kotlin für Buildscripts. Auch Unternehmen haben Kotlin für sich entdeckt, dazu zählen unter anderem Amazon (Web Services), Pinterest, Netflix, Uber und Trello.

Um Kotlin zu einer echten full-stack Sprache zu machen, will JetBrains ein umfangreiches Tooling zur Verfügung stellen. Besonders am JavaScript-Tooling möchte das Kotlin-Team weiterarbeiten und am Library Support. Bereits in Arbeit ist die inkrementelle Kompilation für die JavaScript-Plattform, die noch im 1.1.x Release-Zyklus kommen soll. Auch die neuen Features von Java 9 sollen, noch vor deren Erscheinen, komplett unterstützt werden.

Weitere Informationen zum Release von Kotlin 1.1 gibt es, wie immer, auf dem Blog von Jetbrains, wie man mit Kotlin durchstarten kann, erfährt man auf der offiziellen Homepage. Dort kann man Kotlin auch online ausprobieren.



Update vom 20.02.2017

Kotlin 1.1 Release Candidate erschienen

Etwa zwei Wochen ist es her, dass JetBrains die zweite Beta für Kotlin 1.1 veröffentlicht hat. Nun hat Kotlin 1.1 den Status des ersten Release Candidate erreicht. Viele Features und Änderungen sind durch die Vorversionen bereits bekannt, ein Schmankerl gibt es aber doch noch: Mit der Funktion takeUnless hat die Funktion takeIf ein Gegenstück erhalten, die schon aus früheren Versionen bekannt ist. Zudem wurden einige Bigs gefixt, was unter anderem die Performance der IDE verbessert.

Mit dem Release Candidate konnten außerdem einige Compiler-Probleme früherer Versionen gelöst werden. So soll all jener Code, der mit 1.1‑M0x und den dazugehörigen Betas kompiliert wurde, nochmals recompiled werden. Hier entstanden Konflikte, da in vorherigen Versionen Binaries produziert wurden, die vom Compiler herausgefiltert wurden. Eine weitere wichtige Änderung betrifft genutzte JDK -Versionen. War es bisher möglich, Code ab Java 6 zu kompilieren, ist mit Kotlin 1.1 nur noch der Einsatz von Java 8 und 9 möglich. Entwickler werden bereits durch eine Warnung des Compilers darauf hingewiesen. Das betrifft aber nur die Build-Umgebung, ansonsten gilt nach wie vor der Support ab Java 6.

Verabschiedet haben sich die Entwickler von der Extension Property .javaClass. An deren Stelle tritt ::class.java.. Die IDE bietet dafür ein Quickfix, das individuell aber auch übergreifend für ein Projekt eingesetzt werden kann. Ebenfalls verlassen werden uns in zukünftigen Versionen Hilfsfunktionen der kotlin.dom– und kotlin.dom.build-Pakete.

Mehr Informationen finden Sie in diesem Blogpost sowie auf der Projektseite.



Update vom 07.02.2017

Kotlin 1.1 Beta 2 erschienen

Kern der zweiten Beta von Kotlin 1.1 war es, die bisher vorgestellten neuen Features wie Coroutines und das JavaScript-Backend weiter zu verbessern und Bugs zu entfernen. Auch die Stabilität stand im Fokus der Entwickler sowie die (Source-)Kompatibilität zu Kotlin 1.0, der Vorgängerversion.

Für JavaScript-Projekte wurde der Name des Artefakts der Standard-Library geändert. Statt kotlin-js-library ist nun kotlin-stdlib-js zu verwenden. Die Testing Support Classes für JavaScript aus dem Paket kotlin.test sind jetzt als eigenständiges Artefakt zusammengefasst. Wer kotlin.test in einem JS-Projekt verwendet, muss eine Abhängigkeit in kotlin-test-js hinzufügen. Schließlich und endlich wurden auch die APIs der Coroutines aus der Kotlin Standard Library verschoben: Sie befinden sich nun im Paket kotlin.coroutines.experimental.

Features

Der Compiler gibt ab der zweiten Beta von Kotlin 1.1 eine Warnung aus, wenn eine Extension deklariert wird, die die gleiche Signatur wie ein Mitglied der gleichen Klasse hat. Diese wird ab sofort auch immer geshadowed (z.B. String.length()). Der Operator minus kann seit der aktuellen Version auch mit Maps verwendet werden. In diesem Fall wird eine Kopie der Map zurückgegeben, abzüglich der angegebenen Schlüssel. Auf veränderbare Maps kann mit diesem Update auch der Operator -= genutzt werden, um die angegebenen Schlüssel von der Map zu entfernen.

Zwei Intentions wurden für Kotlin 1.1 Beta 2 umgesetzt: die eine um zwei verschachtelte if-Statements zu mergen, die andere um View-Konstruktoren in Android-Anwendungen zu generieren. Auch die Unterstützung für das Erstellen von Android-Projekten wurde implementiert und gilt, sofern die Jack Toolchain eingeschaltet ist (jackOptions {true}).

Kompatibilität zu Kotlin 1.0

Bei dem aktuellen Update wurde besonderes Augenmerk auf die (Source-)Kompatibilität mit Kotlin 1.0 gelegt. Dies bedeutet, dass man Kotlin 1.1 auch dann nutzen kann, wenn das Team noch Kotlin 1.0 verwendet. Kaputt machen kann man den Build dabei nicht, auch wenn man die neuen Features verwendet. In drei Schritten geht es in den Kompatibilitätsmodus:

  • Für Maven, Ant und den Command-Line Compiler muss -language-version im Compiler auf 1.0 gestellt werden.
  • In einem Gradle Build muss dem compileKotlin-Task kotlinOptions { languageVersion = "1.0" } hinzugefügt werden.
  • In der IDE muss die Spracheversion im Menü Settings | Build, Execution, Deployment | Compiler | Kotlin Compiler eingestellt werden.

Weitere Informationen zu der aktuellen Beta-Version gibt es auf dem Kotlin Blog, auf GitHub gibt es eine vollständige Übersicht aller Änderungen, Verbesserungen, Features und Bugfixes.



Update vom 25.01.2017

Kotlin 1.0.6 und Vorschau auf Kotlin 1.1

Die Entwickler der JVM-Sprache Kotlin waren auch zwischen den Jahren und schon zu Beginn des Jahres 2017 fleißig: Neben dem Bugfix- und Tooling-Update Kotlin 1.0.6 veröffentlichten sie auch die Beta-Version von Kotlin 1.1, über die wir bereits letzte Woche berichteten. Nun gibt es einen weiteren Ausblick darauf, was Entwickler in der kommenden Sprachversion erwarten wird.

Kotlin 1.0.6: Verbesserungen des IDE Plug-ins und Android Supports

Mit Version 1.0.6 wurden die Bemühungen von JetBrains, Code automatisch in idiomatisches Kotlin zu konvertieren, fortgesetzt. Der Block try-finally kann auf Wunsch mit nur einem Klick durch einen use()-Call ersetzt werden, wenn finally lediglich die Ressource schließt. Die IDE schlägt diese Option automatisch vor. In Sachen Code-Lesbarkeit wurde die Intention „Add names to call arguments“ hinzugefügt, mit der man ganz einfach Namen für einen Parameter vergeben kann.

 Auf Wunsch wird try-finally durch use() ersetzt / Quelle: Kotlin Blog


Auf Wunsch wird try-finally durch use() ersetzt / Quelle: Kotlin Blog

Android Studio 2.3 beta 1 wird ab Kotlin 1.0.6 unterstützt, das gleiche gilt für Version 2.3.0-alpha3 des Android Gradle Plug-ins und alle Folgeversionen. Die Unterstützung für Android Extensions in der Entwicklungsumgebung ist ab sofort nur noch dann aktiv, wenn das korrespondierende Plug-in auch in gradle.build aktiviert ist. Zudem gibt es einige Fixes in Android Lint.

Auch am Kotlin Annotation Processing Tool (KAPT) wird fleißig geschraubt, insbesondere die Performance der Datenverarbeitung wurde seit Version 1.0.4 verbessert. Zwei neue Plug-ins hat Kotlin 1.0.6 ebenfalls an Bord: Das All-open– und das No-arg-Compiler-Plug-in. Ersteres versieht Klassen mit einer spezifischen Annotation und macht alle Inhalte der Klasse „open“, ohne das explizite open-Keyword zu verwenden. Letzteres generiert einen zusätzlichen Zero-argument-Konstruktor für Klassen ohne spezifische Annotation.

Weitere Informationen zum Update gibt es auf dem Kotlin-Blog, eine vollständige Änderungsübersicht findet man auf GitHub.

Kotlin 1.1: Was in die Standard-Bibliothek kommt

Mit dem voraussichtlich im Sommer erscheinenden Java 9 kommt auch das Modul-System, genannt Projekt Jigsaw. Eine der Prämissen hiervon ist, dass nicht zwei Module im gleichen Paket als Public API gelten können. Das Modul kotlin-runtime teilt sich eine Menge kotlin.*-Pakete mit dem Modul kotlin-stdlib und auch mit dem Modul kotlin-reflect teilt es sich ein Paket.

Wegen dieser Überschneidungen und um die Artefakte besser an das Modulsystem anzupassen, hat sich das Kotlin-Team entschlossen, einige Veränderungen vorzunehmen. Konkret heißt das, dass die Module kotlin-runtime und kotlin-stdlib im Artefakt kotlin-stdlib zusammengefasst werden. Auch das Archiv kotlin-runtime.jar wird, um keine Verwirrung aufkommen zu lassen, in kotlin-stdlib.jar umbenannt. Diese Umbenennung wird in zwei Stufen ablaufen: In Kotlin 1.1 werden die beiden Archive mit gleichem Inhalt verfügbar sein, ab Kotlin 1.2 wird die veraltete Version entfernt. Im Modul kotlin-reflect wird das gesamte API in das Paket kotlin.reflect.full umgelagert.

Das neue Standard-Bibliothek-API beinhaltet in Kotlin 1.1 viele neue Funktionen und Klassen, etwa takeIf() und also(), zwei general-purpose Extension-Funktionen, die auf jeden Empfänger anwendbar sind. also entspricht in seiner Funktionsweise apply, der einzige Unterschied ist, dass der Empfänger im Block als this anstelle von it verfügbar ist. takeIf verhält sich hingegen wie filter, nur mit einem einzelnen Wert.

Mit den Funktionen minOf() und maxOf() kann man den niedrigsten oder höchsten Wert von zwei oder drei Werten herausfinden, mit Map.toMap() und Map.toMutableMap() kann man Maps sehr einfach kopieren:

class ImmutablePropertyBag(map: Map<String, Any>) {
    private val mapCopy = map.toMap()
}

Die gesamte Vorschau für die Änderungen in Bezug auf Java 9 und eine detaillierte Beschreibung der Änderungen im Standard-Bibliothek API gibt es auf dem Kotlin Blog.



Update vom 20.01.2017

Kotlin 1.1 Beta erschienen: Coroutines und JavaScript an Bord

Kotlin 1.1 ist in der Beta erschienen. Zu den größten Neurungen gehört die Kompilierung zu JavaScript und die Coroutines auf der JVM, Android und JavaScript. Das Ziel, das sich die Entwickler auf die Fahne geschrieben haben, ist Full-Stack Developement mit Kotlin.

So können mit Koltin 1.1 Kotlin-Strings, Collections, Sequences, Arrays und andere Core APIs sowohl in JavaScript als auch in JVM/Android genutzt werden. Außerdem werden mit der Zeit einige JS Libarries zur Verfügung stehen. Alle populären Runtime-Modul-Systeme für JavaScript, Webpack und andere Tools werden zudem unterstützt. Stichwort Coroutines: Das Besondere daran ist, dass diese im Gegensatz zu Prozeduren unterbrochen und zu einem späteren Zeitpunkt weiter ausgeführt werden können, ohne dass sie ihren Status verlieren. Die Entwickler warnen aber: Auch wenn Coroutines Vorteile bringen, handelt es sich dabei um ein relativ neues Feature für Kotlin. Daher erhält es erst mal den Stempel „experimental“.

Der Kotlin-Standard-Library wurde außerdem ein Update mit neuen Funktionen und Extensions spezifisch fürs JDK 7 und 8 spendiert. Außerdem wird mit Kotlin 1.1 der JSR 223 „Scripting for the Java Platform“ unterstützt, der unter anderem vom Spring Framework oder typensicheren DSLs genutzt wird.

Verabschiedet haben sich die Entwickler dagegen von mod, das für den %-Operator genutzt wurde. An seine Stelle tritt rem, das man problemlos mit Libraries wie java.math.BigInteger einsetzen könne.

Ist man die Entwicklung mit Java gewöhnt, ist diese Information wichtig zu beachten: Es gibt keine Garantie für Rückwärstkompatibilität. Sobald der finale RC von Kotlin 1.1 erscheint, werden Binaries von vorherigen Releases vom Compiler nicht mehr unterstützt. Mehr Informationen zum Release finden Sie in dem von JetBrains veröffentlichten Blogpost. Es gibt übrigens einen frischen Kotlin-Podcast, mit dem Sie immer auf dem neusten Stand bleiben:

Update vom 29.11.2016

Kotlin 1.0.5: Postfix Code Completion & neue Refactorings

Die Anfang des Monats erschienene Version 1.0.5 von Kotlin dient, wie bereits der Vorgänger, der Aktualisierung des Toolings und dem Bugfixing. Gerade im Bereich des Compilers und der IDE-Integration wurden über 150 Issues geschlossen, über 50 beim Tooling.

Das Plug-in für IntelliJ IDEA kann nun viele Fälle entdecken, bei denen imperative for-Loops in kompaktere und idiomatischere Lambdas umgeschrieben werden können. Unter Verwendung von Funktionen der Standard-Bibliothek, etwa filter und map, kann diese Konvertierung schnell und einfach durchgeführt werden. Ein Beispiel:

val result = arrayListOf<String>()
for (s in list) {
    if (s.isNotEmpty()) {
        result.add(s)
    }
}

Das oben stehende Code-Snippet wird, sofern die Konvertierung angestoßen wird, in folgende Zeile umgewandelt:

val result = list.filter { it.isNotEmpty() }

Starten kann man die Konvertierung, indem man den Cursor auf das Keyword for bewegt und dann ALT + ENTER drückt. Nutzer der IntelliJ IDEA können sich nun auch über die Postfix Code Completion freuen, die ab sofort für Kotlin verfügbar ist und ein großes Spektrum an Templates mit sich bringt. Da dieses Feature allerdings auf den Änderungen für Version 2016.2 der IntelliJ IDEA basiert, ist es nicht für Android Studio 2.2 verwendbar. Für neuere Versionen des Android Studios wird die Postfix Code-Vervollständigung aber verfügbar sein.

Postfix Code Completion / Quelle: Kotlin Blog

Postfix Code Completion / Quelle: Kotlin Blog

Das Kotlin Plug-in unterstützt nun auch zwei neue Refactorings, die zuvor lediglich für Java und einige andere Sprachen verfügbar waren: Extract Interface und Extract Superclass. Auch das komplett neue Refactoring Introduce Type Parameter ist bei der aktuellen Version bereits an Bord und ermöglicht es, bestimmte Klassen und Funktionen in generische umzuwandeln.

Das JavaScript-Backend wird mit Kotlin 1.0.5 um zwei signifikante Features erweitert. Das erste ist die Annotation @JsName. Anhand dieser können die Namen von JavaScript-Funktionen und -properties kontrolliert werden, die aus Kotlin-Code generiert werden. Dies soll es einfacher machen, Kotlin-kompilierten Code aus reinem JavaScript aufzurufen. Die zweite wichtige Änderung ist die Unterstützung von Klassenintervallen (Foo::class). Der Wert eines ::class-Ausdrucks implementiert dabei nicht das ganze KClass-API, sondern definiert lediglich ein simpleName-Property, um auf den Klassennamen zuzugreifen.

Eine vollständige Liste aller gefixten Bugs und geschlossenen Issues gibt es auf GitHub. Auf die aktuelle Version bringt man das Kotlin Plug-in im Menü Tools | Kotlin | Configure Kotlin Plugin per Klick auf Check for Updates now.



Update vom 23.09.2016

Kotlin 1.0.4 erschienen: Bugfix und Tooling Update

In Kotlin 1.0.4 wurden unter anderem an Verbesserungen bezüglich der IDE und der Build Tools sowie dem Support von JavaScript gearbeitet. Die Entwickler stellen in einem Blogpost außerdem wichtige Änderungen bezüglich der Sprach-Features von Kotlin heraus: So ändert sich unter anderem das Verhalten von val im Bezug auf try/catch Statements. So ließ sich der gleiche val bis Version 1.0.4 sowohl in try als auch in catch Branches eines try/catch Statements voreinstellen. Es war folgender Code erlaubt:

val x: Int
try {
    x = 1
}
catch(e: Exception) {
    x = 2
}

In Kotlin 1.0.4 wirft diese Zuordnung des gleichen val in try und catch Branches eine Warnung aus, ab Kotlin 1.0.5 sogar eine Error-Meldung. Indem der Code zu einer Expression Form konvertiert wird, sollte dieses Problem nun umgangen werden. Die IDE schlägt in diesem Fall einen Quickfix vor, der den Code automatisch konvertiert. Das Beispiel oben würde dann so aussehen:

val x = try { 
    1
}
catch(e: Exception) {
    2
}

Dem neuen Release wurde außerdem eine neue, experimentelle Implementierung des Annotation Processing API spendiert. Und auch an dem JavaScript Backend wurde gearbeitet: Es ist nun in der Lage, Code in Module zu kompilieren, die mit AMD-, CommonJS- und UMD-Modulsystemen kompatibel sind. Außerdem gibt es einige Verbesserungen für den Compiler – wie eine verbesserte Type Inference für abrufbare Expressions – und im Bezug auf die Build Tools. Last but not least ist es durch Änderungen für die IDE unter anderem möglich, Kotlin-Syntax zu nutzen, wenn man Ausdrücke und Watches in Java Files evaluieren möchte.

Wie immer freuen sich die Entwickler über Feedback zur neuen Version. Mehr Details zu dem Release finden Sie im Blogpost der Entwickler.



Update vom 15.07.2016

Erste Preview zu Kotlin 1.1

Es gibt Neuigkeiten aus dem Hause JetBrains: Die erste Preview von Kotlin 1.1 wurde veröffentlicht. Auch wenn die Entwickler betonen, dass es bis zur Beta noch ein langer Weg ist – die Preview ist ja noch keine stabile Version –, laden Sie interessierte Entwickler zum Testen dieser Version ein.

Kotlin 1.1-M01: Was ist neu?

Sprachlich hat sich auf dem Weg zu Kotlin 1.1 schon einiges geändert. So soll der Support von Coroutines verbessert werden. Momentan ist es noch so, dass in manchen Fällen Typinferenz nicht supported wird oder die IDE nur eingeschränkt unterstützt wird. Auch an sogenannten Type Aliases wurde gearbeitet. Diese vergeben alternative Namen an existierende Typen. Außerdem wird an folgenden Aspekten der Sprache gefeilt:

  • Lokal delegierte Properties
  • JDK-abhängige Built-in-Klassen
  • Geschlossene Class Inheritors innerhalb einer Datei
  • Basis-Klassen auch als Datenklassen erlauben

Auch im Scripting hat sich etwas getan. Zu den Neuerungen gehört der Support für das Script Definition Template und dazugehörige Funktionalitäten, mit einigen Ausnahmen, und speziell geschriebene, Template-basierte Scripts in IDEA, sowie die Implementierung der GradleScriptTemplateProvider Extension. Compiler, Standard Library und der IDE wurden auch Fixes und kleinere Änderungen spendiert, unter anderem die „Leaking this“-Inspektion in der IDE. Diese melden gefährliche Operationen in einem Konstruktor.

Die Entwickler freuen sich über Feedback, dazu sollte entsprechende Rückmeldung via KEEP, dem Kotlin Evolution and Enhancement Process gegeben werden. Um Projekte in Maven/Gradle zu updaten, folgen Sie der Anleitung auf JFrog Bintray, innerhalb der IDE reicht das Auswählen der Early Access Preview 1.1 über Tools -> Kotlin -> Configure Kotlin Plugin Updates.



Update vom 01.07.2016

Kotlin 1.0.3 ist da

Bugfixes, Tooling-Verbesserungen und Performance – um dieses Trias an Maßnahmen ging es im Update 1.0.3 der JVM-Sprache.

Der Performance-Schub wurde u.a. dadurch erreicht, dass weniger IO-Operationen beim Laden der mit Kotlin kompilierten Klassen nötig werden. Einige nützliche Features wurden auch dem Compiler spendiert. So wartet dieser mit der neuen Option -jdk-home auf, mit der die JDK-Version, gegen die kompiliert werden soll, angegeben werden kann.  Mit -language-version lässt sich die Kotlin-Sprachversion spezifizieren, entsprechend geht es bei -jvm-target um die gewünschte Java-Target-Version.

Interessant sind die Neuerungen im Tooling-Bereich, etwa beim Java-nach-Kotlin Konverter. Für Java-Code, der von außerhalb der IDE, etwa von Browser, in die Entwicklungsumgebung kopiert werden soll, wird nun eine automatische Konversion nach Kotlin vorgeschlagen.

 

Im Kotlin-Bytecode-Fenster sowie für mit Kotlin kompilierten .class-Dateien steht nun eine Decompile-Funktion zur Verfügung.

Die Smart Completion funktioniert jetzt auch nach „by“ und „in“.

 

Zum Update auf die neue Version empfehlen die Entwickler den Pfad Tools | Kotlin | Configure Kotlin Plugin Updates, wo man den Button “Check for updates now” findet. Nötig ist zudem die Aktualisierung des Compilers sowie der Standard Library-Version in den Maven und Gradle Build-Skripten.

Die komplette Liste der Änderungen kann im Changelog eingesehen werden.



Update vom 02.06.2016

Ausblick auf Kotlin 1.1

Kotlin-Projektleiter Andrey Breslav hat in einer Video-Präsentation nun Einblicke in die weitere Planung für Kotlin gegeben.

So sollen die kommenden Versionen Kotlin 1.0.x vor allem mit Bugfixes, Verbesserungen im Compiler und Performance Updates erscheinen. Auch an der inkrementellen Kompilierung in der IDE soll weiter gearbeitet werden, sowie an der Unterstützung von Spring in der IDE. Auf der Agenda des Entwicklungsteams stehen laut Andrey Breslav außerdem eine Reduzierung der Bibliotheksgrößen und Android Lint Checks, die Entwickler warnen, wenn sie Fehler in Android-spezifischem Code machen.

Parallel arbeitet das Kotlin-Team auch an Version 1.1 der Programmiersprache: Hier werden Kotlin neue Sprach-Features spendiert. Kotlin 1.1 soll sich aber auch rückwärtskompatibel verhalten, sodass bestehender Code aus Kotlin 1.0.x weiter kompiliert werden kann. Außerdem arbeiten die Entwickler auf dem Weg zu Kotlin 1.1 an Defaultmethoden für Java 8 und der Unterstützung beliebter JavaScript Toolchains wie npm und browserify.



Update vom 17.5.2016

Kotlin 1.0.2 führt inkrementellen Compiler ein

Neben Bugfixes an Compiler und Sprache bringt Kotlin 1.0.2 einige Neuerungen bei der IDE-Unterstützung und den Build Tools.  So wurde die inkrementelle Kompilierung in der IDE  verbessert, die jetzt nicht mehr als experimentelles Feature mitgeliefert wird, sondern per Default aktiviert ist. Komplett neu ist die inkrementelle Kompilierung in Gradle Builds.

Zu den weiteren Neuerungen gehören Android Lint Checks, ein erster Support für das Spring Framework in IntelliJ IDEA und ein überarbeitetes JavaScript Backend, das nun Features wie geschachtelte Klassen, lokale Klassen und nicht-lokale Returns beherrscht.

Außerdem wurden erste Support Libraries für Java 7 und 8 bereit gestellt, die die neuen APIs (z.B. das Stream API) als Extension Functions der Klassen in der Kotlin-Standard-Bibliothek exponiert. Der volle Support für Java 7/8 soll in Kotlin 1.1 nachgeliefert werden.

Alle Infos zu Kotlin 1.0.2 finden sich in der Release-Ankündigung auf dem Kotlin-Blog.



Update vom 17.3.2016

Kotlin in Version 1.0.1 erschienen

Kotlin 1.0.1 ist in der neuen Version mit Gradle 2.12 kompatibel, außerdem wurde in der IDE am Support für IntelliJ IDEA 2016 gearbeitet. Hier gibt es zusätzlich ein Kotlin Education Plug-in. Außerdem wurde der Compiler, die Library und das Gradle Plug-in mit 47 kleineren Bugfixes verbessert und auch die IDE an 39 Stellen optimiert.

Mitte 2011 erstmals veröffentlicht und seit Februar 2012 als quelloffenes Projekt vorangetrieben, zielt Kotlin auf Java- und JavaScript-Plattformen ab. Die Sprache kann in Bytecode oder JavaScript kompiliert werden; zu ihren Merkmalen gehören ein statisches Typensystem, Objektorientierung, prozedurales Programmieren mittels Funktionen, die Unterstützung für Variable Type Inference und Support für Closures.

Wo Kotlin vor allem für Aufmerksamkeit sorgt, ist die Android-Entwicklung. Hier heißt es, dass Kotlin Javas großer Herausforderer sei. Das Interesse an Kotlin scheint zu wachsen: Wie der aktuelle Google Trend zeigt, sind gerade ab der zweiten Jahreshälfte 2015 die Suchanfragen nach Kotlin gestiegen:

Kotlin vs. Java vs. Scala

Dem Vergleich mit anderen Programmiersprachen wie Java, aber auch Scala stellen sich die Kotlin-Entwickler selbst. So soll Kotlin Java beispielsweise in Bezug auf Lambda Expressions in Kombination mit Inline-Funktionen schlagen. Auch das als Billion Dollar Mistake verschriene Problem der Nullreferenz im Code umgeht Kotlin durch sein Typensystem. Im Vergleich mit Scala geht Kotlin mit Typen-Checks und Casts ins Rennen: So kann in Kotlin geprüft werden, ob ein Objekt mit einem gegebenen Typ in der Runtime konform ist, indem is oder !is verwendet wird. Soweit ein Auszug, den detaillierten Vergleich mitJava und Scala finden Sie auf der Projektseite.



Beitrag vom 16.2.2016 von Michael Thomas

JVM-Sprache Kotlin in Version 1.0 erschienen

Was lange währt: Nach insgesamt 14 Meilensteinen, 4 Beta-Versionen und einem Release Candidate hat Kotlin, die statisch typisierte Programmiersprache für die JVM und Android aus dem Hause JetBrains, seine erste Hauptversion erreicht.

Mitte 2011 erstmals veröffentlicht und seit Februar 2012 als quelloffenes Projekt vorangetrieben, zielt Kotlin auf Java- und JavaScript-Plattformen ab. Die Sprache kann in Bytecode oder JavaScript kompiliert werden; zu ihren Merkmalen gehören ein statisches Typensystem, Objektorientierung, prozedurales Programmieren mittels Funktionen, die Unterstützung für Variable Type Inference und Support für Closures.

Kotlin versteht sich als leichtgewichtige Sprache, die vollständig mit Java interoperabel ist, was sie zu einer validen Alternative für die Android-Entwicklung (nicht zu vergessen: Android Studio, die offizielle Entwicklungsumgebung von Android, basiert auf IntelliJ IDEA – ebenfalls aus dem Hause JetBrains). Wie der Leiter des Kotlin-Projekts, Andrey Breslav, unterstreicht, arbeitet Kotlin mit den meisten Tools des Java-Ökosystems, darunter Maven, Gradle, Ant, GitHub, Slack und Spring Boot, gut zusammen. Da Bibliotheken zwischen Java und Kotlin austauschbar verwendet werden können, halten sich zudem die Bytecode-Footprints in Grenzen.

Wie Breslav in der offiziellen Ankündigung des Weiteren schreibt, wurde Kotlin bereits geraume Zeit vor seiner offiziellen Freigabe von zahlreichen Unternehmen als reif für den Produktiveinsatz eingeschätzt und auch dementsprechend verwendet. JetBrains selbst nutzt Kotlin bereits seit zwei Jahren in mehreren Projekten, darunter seine hauseigene IDE IntelliJ IDEA. Wer sich für die harten Zahlen interessiert: Vergangenen Monat wurde Kotlin von mehr als 11.000 Nutzern verwendet, mehr als 500.000 Kotlin-Codezeilen finden sich in Projekten wie IntelliJ IDEA oder Rider. Mittlerweile befinden sich zudem zwei Bücher (Kotlin in Action und Kotlin for Android Developers) auf dem Markt, die alle Interessierten durch die Untiefen der Sprache führen.

Roadmap

Derweil ruhen sich die Kotlin-Entwickler nicht auf ihren Lorbeeren aus: Neben Bugfixes und einer langfristig angelegte Abwärtskompatibilität der Sprache sowie der Standardbibliothek kotlin-stdlib sehen die aktuellen Pläne ständige Performance-Verbesserungen für die Kotlin-Toolchain (z. B. inkrementelle Kompilierung mit Gradle), einen offiziellen JavaScript-Support (bislang experimentell), sowie die Möglichkeit der Erstellung von Java-8-Bytecode mit optimierten Lambdas vor.

Wer sich näher mit der JVM-Sprache beschäftigen möchte, dem bieten sich mit dem Kotlin-Forum, sowie mit Slack, Reddit oder Hacker News zahlreiche Anlaufstellen.



Interview mit Benedict Pregler:

In dieser Woche hat JetBrains die erste Hauptversion der JVM-Sprache Kotlin veröffentlicht. Wir haben das Release zum Anlass genommen, MobileTechCon Speaker Benedict Pregler nach seinen Erfahrungen mit der JVM-Sprache zu befragen. Mit welchen Features kann Kotlin punkten? Und wo gibt es noch Verbesserungsbedarf?

JAXenter: Kotlin vs. Java, das ist ein bisschen wie David gegen Goliath. Warum ist Kotlin für dich eine gute Alternative für die Android-Entwicklung?

5665b5ed729ae420206474f7version49sizefull-300x210Benedict Pregler: Bei der Android-Entwicklung mit Java muss bedacht werden, dass noch größtenteils Java 6 verwendet wird. Daher können die lang ersehnten Features aus der aktuellen Java 8 Version gar nicht verwendet werden. Zwar hat Google angekündigt, auf das aktuelle OpenJDK zu wechseln, bis aber alle Geräte diese Version unterstützen, wird es noch sehr lange dauern.

Daher trifft JetBrains mit Kotlin einen wunden Punkt der Android-Entwickler. JetBrains hat es geschafft, eine stark typisierte Sprache zu erschaffen, welche auch an sehr vielen Stellen sogenannten Boilerplate Code vermeidet, eine flache Lernkurve hat und – meiner Meinung nach – schlussendlich mehr Spaß macht als Java. Nicht zu vergessen ist die sehr gute Integration in die IDE. Hier liegt der Vorteil darin, dass die Sprache von JetBrains kommt, die außerdem den Unterbau von Android-Studio machen und sich mit dem Programmieren und den Wünschen eines Programmierers sehr gut auskennen.

JAXenter: Welche Sprachfeatures würdest du hier besonders herausstellen?

Benedict Pregler: Mit Java 8 konnten endlich Lambdas benutzt werden und diese gibt es natürlich auch mit Kotlin. Folglich kann mit Kotlin ebenso funktional programmiert werden. Ein weiterer Punkt, welcher viele schon von anderen Sprachen kennen, sind Optionals. Wenn es möglich ist, dass ein Objekt zu einem beliebigen Zeitpunkt den Wert null annehmen kann, so muss es unter Kotlin ein Optional sein. Dies verhindert viele Null Pointer Exceptions und ist überdies beim Programmieren um einiges angenehmer, da sofort ersichtlich ist, dass dieses Objekt null sein kann.

Aber der wichtigste Punkt für viele ist die 100% Interoperabilität mit Java. Das heißt, ich kann ohne Probleme Java-Code aus meinem Kotlin-Code aufrufen und natürlich auch umgekehrt. Dadurch können weiterhin alle bekannten Java-Bibliotheken benutzt werden und bei einer Umstellung von Java auf Kotlin muss nicht sofort das ganze Projekt umgeschrieben werden.

Lesen Sie auch: “Android ist eine komplexe Plattform”

JAXenter: Was muss man bei der Integration von Kotlin in Android Studio beachten?

Benedict Pregler: Android-Studio und Kotlin kommen von JetBrains, daher ist die Integration in Android-Studio perfekt. Deshalb ist es nur nötig, Kotlin als Plug-in in Android Studio zu installieren und zu aktivieren. Das Plug-in kann sogar automatisch Kotlin für das aktuelle Android-Projekt aktivieren (die build.gradle anpassen) und es enthält weiterhin einen einfachen Java-zu-Kotlin-Konverter.

Dieser Konverter funktioniert prinzipiell gut. Aber meine Empfehlung wäre, noch den entstandenen Kotlin-Code zu refakturieren. Der Konverter erkennt nicht, wo im konvertierten Code neue coole Kotlin- Sprachfeatures genutzt werden können, wie z.B. Lambdas.

JAXenter: Kotlin schreibt sich auf die Fahne, Boilerplate Code zu vermeiden. Klingt ja erst mal super. Kannst du Beispiele nennen?

Benedict Pregler: Sehr viel Code kann zum Beispiel bei dem Datenmodell gespart werden, so kann mit Kotlin eine sogenannte Dataclass in einer Zeile erstellt werden. Diese Dataclass ist vergleichbar mit einem POJO in Java, das nur Daten halten soll. Mit dem Zusatz, dass eine Dataclass automatisch Getter, Setter, equals(), hashCode(), toString() und copy() enthält. Daher kann man sich auf die wichtigen Dinge konzentrieren und die Klasse wird nicht mit Getter und Setter aufgebläht. Natürlich besteht weiterhin die Möglichkeit, die jeweiligen Getter, Setter sowie die Methoden anzupassen.

Ein weiteres Beispiel sind die Extension-Methoden und -Property. Extensions können an jede Klasse angehängt werden und sind dann wie eine Methode, welche die Klasse bereitstellt, benutzbar. Es ist nicht nötig, den Code dieser Klasse zu erben oder ein Entwurfsmuster wie den Dekorierer zu verwenden. Ferner kann die Extension, theoretisch, überall im Code definiert werden. Mit Java ist es üblich, sehr viele Utils-Klassen und Methoden zu definieren. Dies wird bei Kotlin mit den Extensions eleganter gelöst und ist auch beim aufrufen und später beim Lesen des Codes sehr viel präziser und angenehmer. Ein einfaches Beispiel wäre an der String-Klasse die Extension getAllVowels() zu definieren und damit kann nun an jedem String “EinString”.getAllVowels() aufgerufen werden.

JAXenter: Wo hapert es derzeit noch bei Kotlin, wenn man es für Android einsetzen möchte? Was würdest du dir in dieser Hinsicht noch wünschen?

Benedict Pregler: Möchte man sehr penibel sein, so gibt es an manchen Stellen noch nicht die gewohnte Vorschläge der IDE, um einen Fehler zu beheben. Diese falschen Vorschläge werden aber mit jedem neuen Update weniger und damit immer seltener. Auch ist dies etwas, was nicht vom Coden mit Kotlin abhält oder auch die Ausführung verhindert.

Wünschen würde ich mir eher von der Android-Entwickler-Community, mal einen Blick zu riskieren, dazu gibt es mittlerweile sehr viele Anleitungen und Beispiele online zu finden.

Benedict PreglerBenedict Pregler ist seit 2014 als Werkstudent bei der arconsis IT-Solutions GmbH in Karlsruhe tätig. Er beschäftigt sich intensiv mit der nativen Android-Entwicklung und verfolgt mit großem Enthusiasmus neue Entwicklungen rund um das Thema mobile Softwareentwicklung.

Geschrieben von
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.