Kotlin: Eine neue Ära für Multiplattform-Projekte

Multiplattform-Projekte mit Kotlin. (Grafik: Shutterstock.com/Bella Melo)
Crossplatform-Frameworks sind nichts Neues. Gerade in der mobilen Entwicklung finden sich dort einige Ansätze, wie für Android und iOS zeitgleich eine App geschrieben werden kann. Doch solche Frameworks kommen meistens mit starken Einschränkungen daher. Sei es bei der Gestaltung der Benutzeroberfläche oder beim Einsatz von plattformspezifischen Technologien. Deswegen setzen viele Programmierer weiterhin auf die komplett native Entwicklung. Dadurch kann das UI ohne Einschränkungen in der Design-Sprache der jeweiligen Plattform gestaltet und der Benutzer vollends zufrieden gestellt werden. Das hat jedoch den Nachteil, dass sich für die verschiedenen Zielplattformen viel Code wiederholt – eben nur in einer anderen Programmiersprache.
So funktionieren Multiplattform-Projekte in Kotlin
Doch Jetbrains will in dem Bereich ordentlich was ändern: Die tschechische Software-Schmiede will für Multiplattform-Projekte mit Kotlin nur den plattformunabhängigen logischen Sourcecode teilen. Der Rest wird weiterhin nativ für die jeweilige Plattform mit den entsprechenden SDKs, Tools und Design-Richtlinien entwickelt.
Um das umsetzen zu können, verwendet Jetbrains drei Module. Das Offensichtlichste ist dabei wohl das Common-Modul. Hier wird der oben beschriebene, plattformunabhängige Teil implementiert. Also alles was mit Daten sowie der Geschäfts- und Präsentationslogik zu tun hat. Auch ziemlich einleuchtend ist das zweite Regular-Modul. Hier wird die Benutzeroberfläche für den Web-Client, Android oder auch iOS sowie plattformspezifische APIs integriert. Das Ganze wird für jede Zielplattform einzeln gemacht, wodurch sich die Anwendung für den Benutzer zu 100 Prozent nativ anfühlt.
Dann wäre noch ein weiteres Modul mit dem Namen Platform übrig. Das stellt ein Stück weit die Verbindung zwischen den beiden anderen Modulen her. Teil des Common-Moduls sind zu erwartende Klassen ohne die eigentliche Implementation – ähnlich zu Interfaces. Nur das die Klassen weitaus mächtiger sind. Sie können wie normale Klassen beispielsweise auch Konstruktoren besitzen.
expect class Foo(val name: String) {
fun bar()
}
fun main(args: Array) {
Foo().bar()
}
Möchte man die Bar-Funktion nun tatsächlich für, sagen wir die Java Virtual Machine (kurz: JVM) implementieren, wird eine weitere Klasse benötigt – jetzt jedoch im Platform-Modul. Die könnte dann wie folgt aussehen:
actual class Foo actual constructor(val name: String)
actual fun bar() {
println("Hallo $name.")
}
}
Das Prinzip von Expect und Actual funktioniert aber nicht nur für Klassen. Auf ähnliche Art und Weise können auch Top-Level-Funktionen oder Typ-Aliasse erzeugt werden. Wie ihr darüber hinaus selbst Multiplattform-Projekte in Kotlin schreiben könnt, erfahrt ihr in der offiziellen Dokumentation.
Multiplattform-Projekte sind noch experimentell
Multiplattform-Projekte wurden in der Kotlin-Version 1.2, welche im November 2017 veröffentlicht wurde, eingeführt und seitdem stark weiterentwickelt. Dennoch sind die Features vorerst experimentell und nicht ausgereift. Das grundlegende Konzept ist jedoch bereits klar und könnte in den nächsten Monaten und Jahren einiges verändern. Auch unter dem Gesichtspunkt, dass Kotlin sich immer mehr zu einer universellen Programmiersprache mausert. Egal ob für Javascript, Android, die JVM, iOS oder Desktop – überall kann Kotlin bereits verwendet werden.
„Wir haben uns entschieden, unsere Expertise in Programmiersprachen zu nutzen und eine Sprache zu erschaffen, die die Leute brauchen.“
Mit Multiplattform-Projekten geht Jetbrains jetzt den nächsten logischen Schritt und folgt damit weiter den Worten von Andrey Breslav, dem leitenden Sprachdesigner von Kotlin: „Wir haben uns entschieden, unsere Expertise in Programmiersprachen (sieben IDEs auf dem heutigen Markt, und jede ist fast ein Compiler) zu nutzen und eine Sprache zu erschaffen, die die Leute brauchen“. Denn mit dem Konzept könnte Jetbrains in Zukunft für viele Unternehmen die Art und Weise wie Software entwickelt wird stark vereinfachen. Vielerorts gibt es Tools fürs Web, den Desktop, iOS und Android. All das könnte Kotlin in Zukunft abdecken, wobei ein großer Teil des Codes einfach wiederverwendet werden kann.
Und was ist da jetzt groß neu bzw. anders als bei Xamarin?
Hallo JK,
das ist eine durchaus berechtigte Frage. Einmal ist Kotlin noch etwas universeller als Xamarin mit C#. Es ermöglicht die Entwicklung von mobilen Apps und nativen Anwendungen genauso wie das Schreiben von Websites, indem der Code in Javascript transpiliert wird.
Ich habe mich selbst bislang nur oberflächlich mit Xamarin beschäftigt und dort bereits festgestellt, dass das ganze nicht sehr einsteigerfreundlich zu sein scheint (korrigiere mich gerne, sollte ich mich täuschen). Bei Kotlin ist das meiner Meinung nach anders. Ein Vorteil bei Kotlin besteht zudem darin, dass die Sprache eine offizielle von Android unterstützte Programmiersprache ist, die zudem viele Ähnlichkeiten zu Swift aufweist, also der neuen Sprache für iOS. Damit ist die Verwendung von C# eher ein Rückschritt.
Jedoch ist der grundlegende Ansatz von Xamarin und Kotlin Multiplatform tatsächlich sehr ähnlich. Die Dokumentation von Kotlin zeigt jedoch direkt den Ansatz auf einer Seite auf und wie das Ganze umgesetzt werden kann. Mit den Code-Beispielen in diesem Artikel kann sich jeder bereits die Umsetzung vorstellen. Bei Xamarin fällt mir das noch sehr schwer.
Viele Grüße aus Hannover
Andreas