Suche
Kotlin für die Java-Entwicklung

JVM-Sprache Kotlin: Kotlin 1.1. – die erste Preview ist da! [Update]

Redaktion JAXenter
icon_Kotlin

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.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

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *