Anzeige
Anzeige
How-To
Artikel merken

From Zero to Hero: Kotlin ist mehr als eine Alternative zu Java

Moderne Features und weniger Code: Das sind die Versprechen der noch jungen ­Programmiersprache Kotlin. Als Alternative zu Java entwickelt, mausert sie sich schnell zur universellen Sprache. Auch Android- und Web-Entwickler sollten aufhorchen.

Von Andreas Domin
9 Min. Lesezeit
Anzeige
Anzeige

(Abbildung: Shutterstock / REDPIXEL.PL)

From Zero to Hero: Das ergab die diesjährige ­Entwicklerumfrage von Stackoverflow zu Kotlin. Zum ersten Mal wurde nach der Programmiersprache gefragt. Das Ergebnis: Die Sprache landete in der Rubrik der beliebtesten Programmiersprachen direkt hinter Rust auf Platz zwei. Explizit wurden über 100.000 Entwickler gefragt, welche Sprachen sie regelmäßig nutzen und damit auch weiterhin arbeiten wollen. Nur rund die Hälfte der Java-­Entwickler stimmten dem zu, bei Kotlin waren es über 75 Prozent. Doch wo kommt Kotlin so plötzlich her und warum erfreut es sich einer dermaßen hohen Beliebtheit?

Anzeige
Anzeige

Die tschechische Softwareschmiede Jetbrains, die vor allem für die Java-Entwicklungsumgebung Intellij Idea bekannt ist, rief das Kotlin-­Projekt 2011 ins Leben. Das Ziel: eine bessere Programmiersprache als Java zu entwickeln. Das Team hatte zu dieser Zeit diverse Projekte mit einer großen Java-Code-Basis und war damit alles andere als zufrieden. Doch alle anderen verfügbaren Sprachen konnten den Ansprüchen des Unternehmens auch nicht genügen – obwohl diese eher moderat gewesen seien, erklärte der leitende Sprachdesigner von Kotlin, Andrey Breslav, in einem Interview mit dem Blog ­Rebellabs 2013. Im Wesentlichen sei es ihnen um eine reibungslose Integration in die vorhandene Infrastruktur, effiziente Tools und eine gute ­Compiler- und Laufzeit-Performance gegangen. Mangels Alternativen nahm Jetbrains also die Sache selbst in die Hand und veröffentlichte schließlich 2016 die erste stabile Version von Kotlin.

Die noch junge Programmiersprache, deren Name auf eine Insel vor Sankt Petersburg zurückgeht, wo Jetbrains eine ­Dependance unterhält, sorgt vor allem für viele moderne ­Features. Das heißt aber nicht, dass die Sprache nicht ausgereift wäre. Schließlich wurde sie fünf Jahre lang entwickelt, bevor die erste stabile Version den Weg in die Öffentlichkeit fand.

Anzeige
Anzeige

Wer sich mit Java und ihrem Herausforderer Kotlin befasst, stellt schnell fest: Es macht einen großen Unterschied, ob eine Sprache aus dem letzten Jahrhundert stammt und moderne Funktionen erst nach und nach integriert wurden oder ob das Sprachdesign von Anfang an mit all den Features geplant wurde, die beim Einsatz in modernen Projekten zum Tragen kommen. Das scheint sich übrigens nicht nur bei Kotlin zu bestätigen, denn die bestplatzierten Programmiersprachen im Stackoverflow-­Ranking wurden in ihrer Erstversion allesamt innerhalb der letzten zehn Jahre veröffentlicht. Das gilt für Rust und Go, Typescript und Swift. Alle erfreuen sich größerer Beliebtheit als die klassischen Programmiersprachen. Python bildet mit dem dritten Platz die einzige Ausnahme.

Anzeige
Anzeige

Java und Kotlin: Kein Entweder-Oder

Wer eine große Java-Code-Base hat und sein bestehendes Projekt nicht auf einen Schlag komplett neu schreiben will, dem bietet Kotlin einen charmanten Übergang. Denn die Jetbrains-Programmiersprache ist kompatibel zu Java. So kann im Kotlin-Code ohne Probleme eine Java-Klasse aufgerufen werden und umgekehrt. Dabei wird der Source-Code von Kotlin übrigens, genauso wie der von Java, in Byte­code übersetzt, welcher dann von der Java ­Virtual Machine (kurz: JVM) gelesen wird.

Doch wenn Kotlin sowieso für die JVM übersetzt werden muss, könnte man sein Projekt nicht auch wie bisher einfach direkt in Java schreiben? Das ist wohl nicht ganz falsch, jedoch hat Kotlin dem Urgestein Java – und auch vielen anderen Sprachen – einiges voraus. Das liegt nicht zuletzt daran, dass die Sprache durch ein Unternehmen wie Jetbrains entwickelt wird, das mit sieben IDE auf dem Markt eine ausgewiesene Expertise in Programmiersprachen hat und durch die langjährige Erfahrung mit Java-Projekten weiß, wo in der Praxis der Schuh drückt.

Anzeige
Anzeige

Ein Beispiel für eine ­mögliche Java-Klasse, bei der teilweise sogar noch Methoden gekürzt oder ganz weggelassen ­wurden. Der Unterschied zu Kotlin (rechts) ist enorm: Da hier alle wichtigen Funktionen für ­Datenklassen auto­matisch generiert werden, benötigt dasselbe Beispiel in Kotlin nur eine einzige Zeile Code. (Screenshot: t3n / Gitlab)

Der wohl elementarste Vorteil von Kotlin gegenüber Java ist die Reduzierung von redundantem Code. Ein Blick auf ein klassisches Beispiel der projektorientierten Programmierung kann das verdeutlichen: das Schreiben einer bestimmten Klasse für ein Objekt. In Java müssen dafür typischerweise neben den ­Attributen auch jede Menge Setter- und Getter-Methoden sowie eine Equals-, Tostring- und Hash­code-Methode geschrieben werden. Hat eine Klasse mal ein paar mehr Attribute, kommen da einige Code-Zeilen zusammen. Auch beim späteren Ergänzen weiterer Attribute müssen nicht nur erneut Setter- und ­Getter-Methoden hinzugefügt, sondern auch die anderen ­Funktionen angepasst werden.

Doch ein Projekt hat natürlich weit mehr als eine einzige derartige Klasse. Dort muss dann das Ganze auf ähnliche Art und Weise erneut geschrieben, oder noch besser: zusammenkopiert werden. Eins der am meisten verbreiteten Programmierparadigmen besagt: „Don’t Repeat Yourself.“ Doch wie sollen sich Entwickler daran halten, wenn bereits das Sprachdesign daran scheitert?

Ein Blick in Kotlin zeigt, dass es anders geht, und offenbart ­nebenbei eines der beliebtesten Features der Sprache: Datenklassen. Dort muss weder für Setter- und Gettermethoden noch für die ­weiteren oben erwähnten Funktionen Extra-Code geschrieben werden. Ein zum obigen Java-Beispiel äquivalenter in ­Kotlin geschriebener Ausschnitt benötigt lediglich eine einzige Zeile Code. Dieser Kontrast setzt sich auch in einigen weiteren Komponenten des Sprachdesigns fort. So geht Jetbrains ein weiteres Problem vieler Sprachen an: Null-Pointer-Exceptions. Programm­abstürze, die während der Laufzeit auftreten, weil auf eine ­Variable zugegriffen wird, die ins Leere verweist. Sie sind besonders in selten verwendeten Code-Ausschnitten tückisch, da der Fehler gerne erst dann auftritt, wenn die Anwendung bereits veröffentlicht wurde. In Kotlin können während der Laufzeit solche Fehler schlicht nur auftreten, wenn sie auch explizit zugelassen werden – was guter Kotlin-Code nur selten tun sollte.

Anzeige
Anzeige

Denn: Normale Variablen dürfen in Kotlin standardmäßig nicht auf Null gesetzt werden. Wenn das manchmal doch nötig wird, liefert Kotlin entsprechende Syntax mit. Ein Fragezeichen, welches hinter den Variablentyp gehängt wird, lässt den Nullverweis zu. Nun meldet der Compiler beim direkten Zugriff auf den Wert einer solchen ­Variable einen Fehler: Die ­Variable könnte ins Leere zeigen. Weitere intelligente Syntax ermöglicht dann den Zugriff auf eine solche ­Variable, ohne dass die klassische ­If-not-Null-Abfrage zum Einsatz kommen muss.
­
Was ­umständlich klingt, ist in der Praxis ein mehr als nützliches Hilfsmittel, da einfach weniger unvorhergesehene Dinge passieren können. Programmierer erhalten größere Kontrolle über den Programmcode und was mit ihm während der Laufzeit passiert.

Eine weitere Besonderheit in Kotlin sind Lambda-­Funktionen, anonyme Funktionen, die häufig als Parameter übergeben werden. Was bei Java erst in späteren Versionen Einzug gehalten hat, ist bei Kotlin von Anfang an mit dabei. Auch hier hat sich Jetbrains bemüht, die in der modernen Entwicklung nicht mehr wegzudenkenden Lambda-Funktionen so intelligent wie möglich zu implementieren. Sie lassen sich nicht nur kürzer schreiben, sondern sind auch besser lesbar als bei anderen Sprachen. Die folgenden Aufrufe mit der auf Collections vordefinierten Filterfunktion sind äquivalent zueinander:

val ints = listOf(1, 2, 3, 4, 5)
ints.filter ({ item ->
    item < 3 }) 
ints.filter { item ->
    item < 3
}
ints.filter { it < 3 }

Dabei werden für die Übergabe des Function-Bodys, also der Teil der auszuführenden Anweisungen, weder runde Klammern noch der Name des Parameters benötigt – vorausgesetzt, dass es nur einen Parameter gibt. Innerhalb der Funktion erfolgt der Zugriff auf den Parameter dann mit dem Schlüsselwort it. Am besten ­lesbar und mit zugleich weniger Code ist die Variante in der letzten ­Zeile. Eine weitere Syntaxbesonderheit lässt sich bei der Verwendung der Fold-Funktion feststellen: Diese bekommt, wie im Folgenden zu sehen, neben der Lambda-­Funktion einen weiteren Parameter übergeben:

Anzeige
Anzeige
val ints = listOf(1, 2, 3, 4, 5) 
ints.fold(1) { acc, _ ->
    acc * 3
}

Da die Funktion jedoch als letzter Parameter übergeben wird, kann die runde Klammer zuvor geschlossen werden, bevor die Implementierung der Lambda-Funktion mit geöffneter geschweifter Klammer folgt. Dieses Vorgehen vermeidet ein Wirrwarr aus zeitgleich zwei verschiedenen geöffneten Klammern. Der Unterstrich kann als anonymer Parameter verstanden werden, da er selbst im Function-Body nicht benötigt wird.

Weitere nennenswerte Features von Kotlin sind das Erweitern beliebiger bestehender Klassen mit neuen Funktionen, Typ-Aliasse und Funktionen höherer Ordnung, die das Übergeben einer Funktion als Parameter oder das Zurückgeben dieser als Ergebnis ermöglichen.

Android, Javascript und mehr

Die Stackoverflow-Umfrage zeigt neben der großen Beliebtheit ­Kotlins auch: Die Sprache ist noch lange nicht so weit verbreitet wie Java oder Javascript. Weniger als fünf Prozent der befragten Entwickler nutzen sie bislang regelmäßig. Kein Wunder, hatte Kotlin seinen offiziellen Release doch erst vor weniger als drei Jahren. Erst seit Mitte 2017 wird Kotlin offiziell als Sprache für Android unterstützt – ist dort aber schon heute kaum noch wegzudenken. Im Github Octoverse Report 2018 landet Kotlin zudem auf dem zweiten Platz der am schnellsten wachsenden Programmiersprachen. Wer neue native Apps für Googles mobiles Betriebssystem schreiben will, sollte sich Kotlin auf jeden Fall genauer anschauen.

Anzeige
Anzeige

Doch Kotlin kann auch bei Projekten fürs Web zum Einsatz kommen. Hierbei wird der Code in Javascript transpiliert, also vom Compiler in die Zielsprache übersetzt. Aber auch für alle anderen Javascript-Projekte, die nicht fürs Web sind, lässt sich ­Kotlin verwenden. Obwohl das Sprachdesign der beiden ­Sprachen sich bereits in den grundlegenden Ansätzen unterscheidet, findet Kotlin auch in diesem Bereich immer mehr Anklang. ­Javascript ist klassenlos und dynamisch typisiert. Kotlin hingegen das genaue Gegenteil: Für die objektorientierte Programmierung ­werden Klassen verwendet und einer der zentralen Aspekte der Sprache ist die statische Typisierung. Sicher, jedes Konzept hat Vor- und Nachteile und nicht für jedes Javascript-Projekt ergibt der Einsatz von Kotlin zwangsweise Sinn. Dennoch gibt es einige gute Gründe, sich den Einsatz von Kotlin für Javascript genauer anzuschauen.

Auf der einen Seite sind die bereits erwähnten Klassen ein Vorteil. Das und viele weitere Kotlin-Features sorgen für einen deutlich aufgeräumteren und somit auch besser lesbaren Code. Gerade bei größeren Projekten kann das einen großen ­Unterschied ausmachen. Auf der anderen Seite sorgt die statische Typisierung auch für die ­Vermeidung vieler Fehler während der Laufzeit, da die ­Datentypen bei der Kompilierung bereits feststehen. ­Zusätzlich sollte erwähnt ­werden, dass Kotlin für Javascript, trotz des ­Widerspruchs zum eigentlichen Sprachdesign, auch die Möglichkeit von dynamisch typisierten Variablen zur Verfügung stellt.

Kotlin: So gelingt der Einstieg

Einen ersten Überblick über die Kotlin-Syntax geben wir euch hier. Hilfe beim Einstieg sowie die komplette, ­aktuell gehaltene Dokumentation von ­Jetbrains findet ihr unter kotlinlang.org/docs/reference. Neben den von Jetbrains selbst zur Verfügung gestellten Tutorials legen wir euch den Medium-Post „Learn Kotlin while developing an Android App“ von Juan Ignacio Saravia und die Youtube-­Tutorials von Peter ­Sommerhoff ans Herz.

Seit einiger Zeit arbeitet Jetbrains außerdem an bislang noch experimentellen Features für Multiplattformprojekte. Konkret können Entwickler dadurch Kotlin-Code schreiben, welcher unabhängig vom Kompilierungsziel wieder­verwendet werden kann. Das ermöglicht Entwicklern, elementare und ­plattform­unabhängige identische Code-Ausschnitte für die JVM sowie beispielsweise auch für ­Javascript zu schreiben. Wird ­neben dem in Javascript geschriebenen Frontend eine serverseitige ­­Java- ­beziehungsweise Kotlin-­Anwendung genutzt, muss nach dem Paradigma „don’t repeat yourself“ kaum Source-­Code doppelt ­geschrieben werden. Einen kleinen Wermutstropfen gibt es jedoch: Auch wenn erste Ansätze schon Teil der letzten ­Updates waren, befinden sich die Multiplattformprojekte noch in der ­Entwicklungsphase. Und obwohl die Kernsprache definitiv ausgereift ist, stößt man öfters auf noch experimentelle Features, die erst in den nächsten Monaten oder sogar Jahren ernsthaft ­verwendet werden können.So auch bei der nativen Kompilierung von Kotlin. ­Jetbrains ­liefert mit Kotlin/Native nämlich eine weitere Möglichkeit, ­Projekte für den Desktop oder auch iOS zu realisieren. Sie sollte jedoch noch mit Vorsicht genossen werden. Auch wenn es ­beispielsweise einen ersten Ansatz gibt, mit Kotlin-Apps ­zeitgleich für Android und iOS zu entwickeln, ist Kotlin/Native noch in der ­Entwicklung. Da das Projekt jedoch bereits öffentlich ­zugänglich ist, kann ­damit schon experimentiert werden.

Anzeige
Anzeige

Wann lohnt sich eigentlich der Umstieg?

Vor allem Java- und Android-Entwickler sollten sich Kotlin ganz genau anschauen. Gerade durch die Kompatibilität zu Java ­lassen sich zunächst einzelne Klassen in Kotlin umschreiben, ­während für das restliche Projekt weiterhin Java verwendet wird. Aber auch für Webentwickler, die mit Javascript arbeiten, ist der ­Umstieg auf Kotlin durchaus eine realistische Option: Gerade weil Javascript für größere Projekte eher ungeeignet ist, ergibt die Verwendung von Kotlin dort oftmals mehr Sinn. Bedacht ­werden sollte allerdings, dass die Kompatibilität von Kotlin zu ­Javascript keinesfalls so ­reibungslos funktioniert wie die zu Java. Wer bestehende ­Projekte in Kotlin umschreiben will, muss damit rechnen, das gesamte Projekt in Kotlin umschreiben zu müssen. Doch der Mehraufwand könnte sich für Entwickler am Ende durchaus lohnen.

Mehr zu diesem Thema
Fast fertig!

Bitte klicke auf den Link in der Bestätigungsmail, um deine Anmeldung abzuschließen.

Du willst noch weitere Infos zum Newsletter? Jetzt mehr erfahren

Anzeige
Anzeige
Ein Kommentar
Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

JayDev

„Ein Beispiel für eine ­mögliche Java-Klasse,…“ ist Unsinn. Keine der „wichtigen Funktionen“ wird wirklich benötigt. Die Klasse kann auch einfach 3 Public-Member haben und (wenn das so unglaublich schick sein soll) in eine einzige Zeile geschrieben werden.

„In Java müssen dafür typischerweise neben den ­Attributen auch jede Menge Setter- und Getter-Methoden sowie eine Equals-, Tostring- und Hash­code-Methode geschrieben werden.“
Falsch. Nichts davon muss sein. Das mag alles religiöse Vorschrift irgendwelcher JAVA-Gurus aus den 1990ern sein, war aber damals schon unnötig. Vielleicht nicht, wenn man aus Eclipse heraus compiliert hat. Da waren ja zumindest per Standardeinstellung einige sehr unschöne Gängeleien aktiviert…

Antworten

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!
Hallo und herzlich willkommen bei t3n!

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team von mehr als 75 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Schon jetzt und im Namen der gesamten t3n-Crew: vielen Dank für deine Unterstützung! 🙌

Deine t3n-Crew

Anleitung zur Deaktivierung
Artikel merken

Bitte melde dich an, um diesen Artikel in deiner persönlichen Merkliste auf t3n zu speichern.

Jetzt registrieren und merken

Du hast schon einen t3n-Account? Hier anmelden

oder
Auf Mastodon teilen

Gib die URL deiner Mastodon-Instanz ein, um den Artikel zu teilen.

Anzeige
Anzeige