Die Syntax Chroniken: Von Dart zu Kotlin

Eine passionierte Flutter Entwicklerin taucht ein in fremde Kotlin Gewässer

Crafted Codes
Dart Flutter Welt
5 min readApr 26, 2023

--

Transition von Dart zu Kotlin

Als ich 2020 meine ersten Codezeilen in einer Programmiersprache schrieb, waren diese in JavaScript. Dem folgten bedingt durch Kurse vom Jobcenter und Bewerbungen in kurzen Abständen Ruby, Java, TypeScript und Dart. Da saß ich, als zarte Programmieranfängerin, mit einem gigantischen Syntax Salat in meinem Kopf, der mir den Programmierverstand verdunkelte. In diesem Chaos leuchtete für mich die Dart Sprache auf und erhellte mir den Weg.

Warum ich Dart liebe

Mir lag die einfache Syntax von Dart sehr und da ich die erhöhte Codestabilität aufgrund der statischen Typisierung im Vergleich zu JavaScript in React Native während eines Praktikums in der App Programmierung bereits vor Einführung der Nullsicherheit beobachten konnte, entstand direkt meine erste Schwärmerei. Die später eingeführte Nullsicherheit, die mit Dart 3 nun auch noch mit nicht deaktivierbarer sound null-safety verbessert ist, war die Kirsche auf der Sahnetorte für die Laufzeitstabilität.
Hinzukommen der Just-In-Time Compiler, der mich sofort alle Änderung testen und implementieren lässt und natürlich Flutter. Wie sehr ich das Flutter Framework liebe, weiß jeder, der nur einmal mit mir darüber gesprochen hat, weshalb ich einfach nur cross-platform als Stichwort nenne, denn sonst wird dieser Artikel eine Liebeserklärung, doch ich möchte hier anmerken, dass ich zu der seltenen Form von Entwicklern gehöre, die sogar sehr gerne Web Apps mit Flutter programmiert. Sogar lieber als mit React, Ruby on Rails oder Hugo, obwohl ich sogar mit React Berufserfahrung gesammelt und mit Hugo Blogs programmiert habe (und in Bezug auf Hugo auch noch tue).
Doch nicht nur das. Mit Dart habe ich bereits schon einige Freude bei der Programmierung von APIs gehabt und freue mich darauf, Dart immer mehr als Backend Sprache zu erkunden.

Die Dart Programmiersprache liebe ich einfach sehr aufgrund ihrer Stabilität und Versatilität.

Warum Dart mit Kotlin untreu werden?

Die Frage hat mir tatsächlich ein befreundeter Flutter Entwickler gestellt und ich konnte es ihm nicht verübeln. Ich selbst habe mir die Frage im vergangenen Jahr gestellt, bevor ich mich dazu entschloss, beim Syntax Institut die Weiterbildung zur IT Fachkraft für mobile Appentwicklung zu machen. Doch wenn ich ganz ehrlich zu mir selbst war, wusste ich, dass Flutter zwar ein wunderbares Framework ist, aber gerade bei sehr komplexen Applikationen die Performance ein schwieriger Punkt sein kann und es sich bei manchen Projekten einfach anbietet, nativ zu programmieren.
Eine weitere bittere Wahrheit für Flutter Entwickler in Deutschland ist, dass es einfach viel weniger Jobs gibt. Bei einer spontanen Suche auf indeed am 20. April 2023 wurden in ganz Deutschland 616 Flutter Jobs und 2765 Kotlin Jobs angezeigt. Also mehr als 4-mal so viele Jobs für Kotlin als für Flutter.

Flutter Entwickler auf Jobsuche

Berücksichtigt man auch noch, dass Kotlin Java sehr ähnlich ist, könnte man später gegebenenfalls auch evaluieren, ob sich nicht auch Java Jobs als passend erweisen könnten.

Dart und Kotlin — so ähnlich und doch anders

Kotlin und Dart sind sich wirklich sehr ähnlich und einer der gravierendsten Unterschiede, dass Kotlin nullsicher “by default” ist, verschwindet auch mit Dart 3.
Nein, die Unterschiede liegen im Detail. Beinahe wie bei zweieiigen Zwillingen, die sich meistens sehr ähnlich sehen (wobei mir bereits eine Ausnahme begegnet ist, aber das Thema sind nicht zweieiige Zwillinge).
Unterschiede in der Syntax sind beispielsweise “val” anstelle von “final” oder “when” anstelle von “switch” für bestimmte Anweisungen oder andere simple Unterschiede.
Mein Wermutstropfen bei Kotlin ist die Schreibweise der Ternary Expression, die mir in Dart einfach sehr viel besser gefällt.

// If-Else-Statement in verkürzter Form in Dart
bool result = condition ? true : false;
// If-Else-Statement in verkürzter Form in Kotlin
val result = if (condition) true else false

Bleiben nur noch größere und kleinere Vorteile für Kotlin. Obwohl beide Programmiersprachen interoperabel sind, also mit anderen Sprachen und Bibliotheken interagieren können, ist Kotlin weitaus stärker mit Java Bibliotheken interoperabel, da Entwickler viel leichter auf bereits bestehende Java Bibliotheken zugreifen können, weil Kotlin auf der Java Virtual Machine (JVM) läuft. Die dadurch gigantische Auswahl an Bibliotheken ist natürlich ein großer Vorteil, aber auch, dass man problemlos bestehende Java Projekte mit Kotlin weiterführen kann, insofern das Projekt nicht auf spezifische Java-Funktionen oder -Bibliotheken angewiesen ist, die in Kotlin nicht verfügbar sind.
Doch in der alltäglichen Programmierung hat Kotlin zwei Vorteile gegenüber Dart:

  1. Klassen und Funktionen müssen in Kotlin nicht exportiert werden (ein kleiner, aber feiner Vorteil)
  2. Die Syntax in Kotlin ist teilweise effizienter und kürzer in Dart.

Zum Beispiel:

  • “when” Anweisungen in Kotlin sind kürzer als “switch” Anweisungen in Dart
// Dart switch Anweisung
switch (value) {
case 1:
print("value is 1");
break;
case 2:
print("value is 2");
break;
default:
print("value is neither 1 nor 2");
break;
}
// Kotlin when Anweisung
when (value) {
1 -> print("value is 1")
2 -> print("value is 2")
else -> print("value is neither 1 nor 2")
}
  • Erweiterungen von Klassen durch Delegationsmuster sind in Kotlin einfacher zu bewältigen
// Erweiterung von Klassen in Dart
mixin Car {
void drive();
}

class SportsCar with Car {
@override
void drive() {
print('Driving a sports car.');
}
}

class Driver with Car {
final Car car;

Driver(this.car);

void driveCar() {
car.drive();
}
}

void main() {
final sportsCar = SportsCar();
final driver = Driver(sportsCar);
driver.driveCar(); // "Driving a sports car."
}
// Erweiterung von Klassen in Dart
interface Car {
fun drive()
}

class SportsCar : Car {
override fun drive() {
println("Driving a sports car.")
}
}

class Driver(private val car: Car) : Car by car {
fun driveCar() {
car.drive()
}
}

fun main() {
val sportsCar = SportsCar()
val driver = Driver(sportsCar)
driver.driveCar() // "Driving a sports car."
}

Der Kotlin Code ist schlanker als der Dart Code.

Ist Kotlin jetzt die neue Liebe?

Wird Dart jetzt mein Ex? Nun Kotlin hat wirklich viele Vorteile gegenüber Dart, doch es gibt ein paar Punkte, die Kotlin nicht abdeckt. Wie beispielsweise eine wirklich hervorragende Coding Erfahrung in VSCode.
Ja, Android Studio hat seine Vorteile, aber mir liegt das Handling in VSCode einfach besser. Des weiteren finde ich die Dokumentation von Dart und Flutter (noch) besser als bei Kotlin. Außerdem kann ich noch nicht sicher sagen, ob mir die Dart oder die Kotlin Syntax besser gefällt. Kotlin kann auch cross-platform, aber wie gut das ist im Vergleich zu Flutter kann ich noch nicht beurteilen.

Final lässt sich sagen…

Es sind keine objektiven Punkte, die Dart möglicherweise mein Favorit bleiben lässt, aber für mich spielt es eine untergeordnete Rolle, was meine eigenen Vorlieben sind. Insgesamt mag ich beide Programmiersprachen bislang sehr und ich bin der Meinung, dass man die Wahl einer Programmiersprache für ein Projekt nicht von persönlichen Vorlieben abhängig machen sollte, sondern welche Programmiersprache für welches Projekt besser geeignet ist.
Mal davon abgesehen werde ich dieses Jahr noch in Swift eintauchen, auf was ich sehr gespannt bin. Wer weiß also, was meine Einstellung in 2024 sein wird?

So oder so freue ich mich riesig darauf, mehr Fähigkeiten zu erwerben und Programmiersprachen zu beherrschen.

--

--