Nach meinen wirklich sehr guten Erfahrungen des ersten Treffens der Kotlin User Group Hamburg war ich begeistert, wieder die Möglichkeit zu haben, persönlich bei einem Treffen mit dabei sein zu können. Glücklicherweise sind alle bisherigen Vorträge der User Group auf Speakerdeck zu finden.
Kotlin/JS
Seit der Version 1.1 von Kotlin ist es möglich Kotlin in JavaScript zu transpilieren. Bisher konnte ich die zugehörigen Fähigkeiten leider noch nicht selbst testen. Daher war ich sehr froh am Vortrag von Jossi teilhaben zu können.
Als wesentliche Vorteile von Kotlin/JS stellte Jossi die folgenden Punkte vor:
- Schreiben von Code in einer statisch typisierten Sprache
- Wiederverwendbarkeit der gleichen Code-Basis
Es müsse allerdings jedem klar sein, dass keine Java-APIs oder Kotlin-Libraries aus Kotlin/JS heraus verwendet werden können. Außerdem könne es zu inkompatibilitäten bspw. zwischen den Collections kommen, die zum einen auf Kotlin-Seite aber auch auf JS-Seite verwendet werden. Sollte man bspw. eine Collection aus JS aus einem Aufruf zurückerhalten (bspw. aus json.parse), könne man selbstverständlich nicht auf den gewohnten Aufruf von map() aus Kotlin hoffen.
Er stellte recht detailliert vor, was beim Aufsetzen eines Kotlin/JS-Projekts zu beachten ist. Das Aufsetzen ähnelt - zumindest in der Struktur - sehr dem Aufsetzen eines JVM-Projekts (bspw. wird im Gradle build file statt kotlin-jvm das Plugin kotlin-js verwendet). Weitere hilfreiche Tipps sind bspw.
- eine sourceMap erstellen zu lassen, um den laufenden JS-Code dennoch in der Kotlin-Ansicht debuggen zu können
- sich über den module loader Gedanken zu machen und entsprechend zu deklarieren (bspw. plain oder auch per require.js)
Folgend stellte er über ein konkretes Beispiel vor, wie sich über Kotlin-JS unter Nutzung von kotlinx.html, einer DSL, Higher order functions und Receivers sehr komfortabel ein HTML-Template erstellen lässt (in seinem Beispiel mit Titel Untertitel und Text), das sich so sehr angenehm an mehreren Stellen im Code nutzen ließe.
Aus seinen Erfahrungen und seinen Recherchen würde er zum jetzigen Zeitpunkt keine Produktionstauglichkeit von Kotlin/JS aussprechen. Dennoch sei daran zu denken, dass diese Technik noch in den Kinderschuhen stecke und es jede Menge Entwickler gebe, die dabei sind, diese Technik weiter voran zu treiben. Zusätzlich gebe es viele Möglichkeiten gute Rückmeldungen aus der Community zu bekommen, sollte man sich an dieser Technik versuchen.
Bezüglich der Wiederverwendbarkeit der Code-Basis zielte Jossi in seinem Vortrag auf die Clients ab. Sollte man verschiedene Clients nutzen (bspw. Android, iOS und Web - mit Kotlin/Native ist auch iOS unterstützt) sei über Kotlin/JS der Client-Code nur einmal zu schreiben. Nach seinem Vortrag hatte ich zum Glück noch die Möglichkeit persönliche Fragen loszuwerden. In diesem Gespräch stellte er ebenso in Aussicht Code zwischen Client und Server über die gleiche Code-Basis (bspw. Validatoren) wiederzuverwenden. In diesem Zuge empfahl er mir das Projekt Multiplatform, in dem man über 3 Module (Common, JS und JVM) Gemeinsamkeiten und plattformspezifische Aspekte steuern könne. Auch wenn er den Produktionseinsatz von Kotlin/JS derzeit nicht empfiehlt, könne er sich dies gerade für Validatoren (die meist sehr einfach aufgebaut sind) dennoch gut vorstellen.
Gradle-Konfiguration mit Kotlin
Im zweiten Vortrag stellte Jendrik vor, wie man Kotlin als Sprache für Gradle nutzen kann. Sein Foliensatz beschränkt sich im Wesentlichen auf eine Linkliste mit interessanten Ressourcen. Die zugehörige Vorstellung geschah eher in einem sehr eindrucksvollen Live-Coding, dessen Inhalte über GitHub einsehbar sind.
Seiner Aussage nach ist Gradle noch dabei den Kotlin-Support weiter auszubauen. Der jetzige Stand kann sich basierend auf seiner Vorstellung auf jeden Fall sehen lassen. Kotlin-Programmierer, die bspw. die statische Typisierung für ihre Build-Skripte vermissen, sei in jedem Fall ein Blick auf sein Repository empfohlen.
Vielen Dank an Jendrik für das Live-Coding aus erster Hand eines Gradle Mitarbeiters. Man hat nicht nur einen sehr guten Eindruck über die Verwendbarkeit von Kotlin erhalten, sondern auch einige Einblicke bspw. in die Plugin-Entwicklung und Caching mit Gradle mitbekommen.