Kotlin: Warum die Java-kompatible Programmiersprache so unglaublich beliebt ist
Die immerhin viertbeliebteste Programmiersprache nach Rust, TypeScript und Python ist Kotlin. Das ist zumindest das Ergebnis der letzten Entwicklerumfrage von Stackoverflow. Wir haben die Sprache näher unter die Lupe genommen und wollen einige der vielseitigen Gründe dafür vorstellen.
Was ist Kotlin?
Jetbrains rief das Projekt Kotlin 2011 ins Leben. Die erste stabile Version wurde jedoch erst 2016 veröffentlicht – die Sprache ist also noch vergleichsweise jung. Sie verfügt über viele moderne Features und macht vieles besser als Java. Entwickelt wurde sie ursprünglich nur für die Java Virtual Machine (JVM). Bedeutet: Ein in Kotlin geschriebenes Programm wird in einen Bytecode übersetzt, der von der JVM gelesen werden kann.
Inzwischen ist Kotlin nicht nur eine offizielle Android-Sprache, sondern auch fürs Web geeignet. Dafür wird der Kotlin-Code in Javascript übersetzt. Neben server-seitigen Anwendungen kann die Sprache mit Kotlin/Native (aktuell noch in der Entwicklung) auch für weitere Plattformen wie beispielsweise Windows, macOS oder sogar iOS oder Linux verwendet werden.
Eine Besonderheit der Sprache ist ihre Kompatibilität zu Java. So kann im Kotlin-Code ohne Probleme eine Java-Klasse aufgerufen werden und umgekehrt. Dadurch lassen sich Java-Projekte nach und nach in Kotlin umschreiben. Das hat den Vorteil, dass es nicht auf einen Schlag komplett neu geschrieben werden muss. Aus diesem Grund wird auch bei bestehenden Android-Apps immer mehr auf Kotlin statt Java gesetzt.
Was macht Kotlin anders (und besser) als Java?
Kotlin macht in vielerlei Hinsicht einiges besser als Java. Ein Beispiel sind Null-Pointer-Exceptions. Sie sind einer der am häufigsten auftretenden Fehler unter Java. Unter Java tritt die Exception meistens erst während der Laufzeit auf, weil man irgendeinen Sonderfall nicht bedacht hat. Jetbrains beseitigt das Problem bei Kotlin ganz einfach: Der Wert einer Variable darf nicht ins Leere verweisen. Tut er es doch, wird bereits beim Kompilieren ein Fehler geworfen.
Aber keine Sorge, ganz ohne Null kommt auch Kotlin nicht aus. Mit einem „?“ hinter dem Typen wird eine Referenz auf Null zugelassen. Greift ihr nun ohne Weiteres auf diese Variable zu, wird vom Compiler wieder ein Fehler geworfen, da die Variable auf Null verweisen könnte. Kotlin liefert Möglichkeiten mit, wie man trotzdem auf diese Variable zugreifen kann.
Was erstmal umständlich aussieht, ist in der Praxis ein sehr nützliches Hilfsmittel. Jegliche Null-Pointer-Exceptions können in Kotlin so verhindert werden. Wollt ihr dennoch einen derartigen Fehler auslösen, liefert die Programmiersprache übrigens auch dafür eine entsprechende Syntax mit.
Weitere Features von Kotlin sind:
- Erweitern einer beliebigen bestehenden Klasse mit neuen Funktionen
- Funktionen höherer Ordnung ermöglichen das Übergeben einer Funktion als Parameter oder das Zurückgeben dieser als Ergebnis
- Eine clevere Syntax für Lambda-Ausdrücke
- Daten-Klassen
- Typ-Aliasse und viele weitere Features
Kotlin ist schlanker als Java
Außerdem ist Kotlin-Code in den allermeisten Fällen deutlich kürzer als äquivalenter Code in Java. Zum Beispiel verfügt die Sprache über sogenannte Daten-Klassen. Das Feature soll die Menge redundanten Codes verringern. Für solche Klassen werden neben Getter- und Setter-Funktionen auch sinnvolle Equal- und toString-Funktionen generiert, ohne dass Entwickler:innen zusätzlichen Code schreiben müssen.
Nehmen wir an, wir wollen eine Klasse für ein Auto schreiben. In Java sieht das dann beispielsweise so aus:
Um genau das gleiche in Kotlin zu realisieren, brauchen wir nur eine Zeile Code und sparen uns das Schreiben der immer wieder gleichen Funktionen:
Lohnt sich der Umstieg von Java zu Kotlin?
Vor allem Java- und Android-Entwickler sollten sich Kotlin einmal näher anschauen. Durch die Kompatibilität zu Java können auch erstmal nur einzelne Klassen in Kotlin geschrieben werden, während das restliche Projekt noch in Java geschrieben ist. Aber auch für Programmierer:innen, die mit Javascript arbeiten, ist Kotlin durchaus interessant. Mit Kotlin Native bietet Jetbrains Entwickler:innen zudem die Möglichkeit, Kotlin auch bei der Entwicklung für Plattformen wie iOS oder sogenannte embedded Devices zu nutzen.
Ja klar. 0,253% sind also „unfassbar beliebt“.
https://www.tiobe.com/tiobe-index/
Java: 15,32%
Wofür wird hier eigentlich (Schleich-) Werbung gemacht?
Scala war auch mal der Super-Ersatz für das so unglaublich schlechte und veraltete Java. Ist heute bei superüberragenden 0,44%. Immerhin fast doppelt so viel wie Kotlin, gell?
Zahlen sind nicht alles mein lieber oder warum denkst du hat Google Kotlin als offizielle Zweitsprache für Android genommen?
was ist nicht ist, das kann werden…
Abgesehen davon ob Kotlin gut ist oder nicht auf die faule Haut muss man sich nicht legen,
besser ist es immer Verbesserungspotential auszureizen.
„eine Klasse für ein Auto“
Das ist keine einfache Klasse. Das ist eine JavaBean.
Niemand zwingt mich zu Gettern, Settern und Konstruktor.
Eine reine Daten-Klasse sieht bei mir in JAVA auch nicht großartig aus als das Kotlin-Beispiel hier.
Wenn ich tatsächlich alles in einer Zeile stehen haben wollte, sind die Unterschiede marginal:
public class Car { private String name; private int color; private double speed; }
„sparen uns das Schreiben der immer wieder gleichen Funktionen“
Dafür gibt es bei wirklich identischen Funktionen Vererbung. Eine der besten Grundideen objektorientierter Programmierung.
Dieser Artikel hat mir erneut gezeigt, dass sich für etablierte JAVA-Entwickler der Umstieg auf Kotlin kaum lohnt. Hoher Lern- und Umstellungsaufwand für (bestenfalls) wenig Vorteile. Und wenn man Pech hat, endet das Ganze wie Silverlight…
Dann bleiben Sie bei Java. Hätte ich freie Wahl (die man als Consultant leider fast nie hat) würde ich nur noch in Kotlin implementieren. Die Data Klassen sorgen schon einmal dafür, dass man sich nicht solche Sachen wie Lombok ans Bein binden muss (was recht häufig nur für die Ersparnis von gettern und settern benutzt wird). ExtensionFunctions machen die lästigen Util-Klassen mit statischen Methoden meist überflüssig. Default Werte für Methoden Parameter sorgen dafür, dass man bei der Einführung neuer Parameter die alte Methode zwecks Kompatibilität nicht mehr überladen muss. Die Unterscheidung zwischen Nullable und non-nullable Typen macht NPE schon zur Laufzeit sichtbar.
Jeder, der sich ein wenig mit Kotlin beschäftigt, wird nicht mit allen Unterschieden was anfangen können, aber wer zumindest nicht 1-2 Vorteile gegenüber Java entdeckt und für sich nutzen kann ist blind.
Habe ich schon erweiterte Collections (über Extension Functions), Smart Casts und Safe Calls erwähnt? Hier mal ein Einzeiler für die n-te Fibonacci Zahl, welche mehrere Vorteile vereint (Funktionen als Expressions schreiben, Ranges, Stream Operationen ohne Stream und „Pair“ als Standard-Hilfsklasse):
fun fibonacci(factor: Int) = (1..factor).fold(Pair(0,1), {x,y -> Pair(x.second,x.first + x.second)} ).first
Ja, das kann man auch rekursiv oder iterativ in Java schreiben, aber Kotlin ist da viel eleganter. Hohen Lern- und Umstellungsaufwand kann ich auch nicht wirklich erkennen, aber so mancher langjähriger JAVA-Entwickler ist halt nicht „etabliert“, sondern einfach nur zu faul was Neues zu lernen.