CodeMinds: IT, Web und App-Entwicklung

#6 Kotlin

HxCode Team Season 1 Episode 6

Willkommen zur sechsten Episode des CodeMinds Podcasts!

Kotlin, eine von JetBrains entwickelte Programmiersprache, hat sich besonders in der Android-Entwicklung einen Namen gemacht. Sinthu, der als Speaker auf dem JUG SaxonyDay über seine Erfahrungen mit Kotlin gesprochen hat, teilt sein Wissen und seine Einblicke in die Vorteile und Anwendungen dieser modernen Sprache.

Über Sinthu
Sinthu stellt sich vor und erzählt von seinem beruflichen Werdegang. Er arbeitet bei Valtec Mobility und entwickelt InCar-Apps für renommierte Automobilhersteller wie Porsche und Audi. Ursprünglich im Cloud-Bereich auf Java-Spring tätig, hat er durch Zufall den Weg in die Android-Automotive-Entwicklung gefunden und teilt nun seine Erfahrungen mit Kotlin in diesem spannenden Bereich.

Die Entstehung und Vorteile von Kotlin
Sinthu erklärt, wie es zur Entwicklung von Kotlin kam und warum JetBrains das Bedürfnis sah, eine neue Programmiersprache zu schaffen. Kotlin wurde nach einer Insel im finnischen Golf benannt, ähnlich wie Java nach der Insel Java benannt wurde. Ein großer Vorteil von Kotlin ist seine Fähigkeit, auf der Java Virtual Machine (JVM) zu laufen, wodurch es möglich ist, Java-Bibliotheken nahtlos in Kotlin-Projekten zu verwenden.

Syntax und Paradigmen
Die Hosts und Sinthu vergleichen die Syntax von Kotlin und Java und stellen fest, dass Kotlin eine einfachere und lesbarere Alternative bietet. Besonders interessant sind die verschiedenen Programmierparadigmen, die Kotlin unterstützt, darunter objektorientierte, funktionale und imperative Programmierung. Ein einfaches „Hello World“-Programm ist in Kotlin deutlich kompakter und leichter zu schreiben als in Java.

Kotlin Multiplatform
Ein Highlight der Episode ist die Diskussion über Kotlin Multiplatform, eine Technologie, die es ermöglicht, Cross-Plattform-Apps zu entwickeln. Sinthu erläutert, wie man mit einer einzigen Kotlin-Codebase Anwendungen für Web, Desktop, iOS, Android und Server erstellen kann. Dieses Feature hebt Kotlin von vielen anderen Sprachen ab und macht es besonders attraktiv für Entwickler, die plattformübergreifend arbeiten möchten.

Beliebte Features und Erweiterungen
Sinthu teilt seine Lieblingsfeatures von Kotlin, darunter Extension Functions, die es ermöglichen, bestehende Klassen und Bibliotheken zu erweitern, ohne Vererbung zu verwenden. Diese Funktion erhöht die Flexibilität und Wiederverwendbarkeit des Codes erheblich. Weitere spannende Features sind Named Arguments und Default Arguments, die den Code lesbarer und weniger fehleranfällig machen.

CoRoutines und Parallelität
Ein weiteres wichtiges Thema sind CoRoutines, ein mächtiges Konstrukt in Kotlin, das ähnlich wie async/await in JavaScript funktioniert. CoRoutines erleichtern das Schreiben von nebenläufigem Code und sind besonders nützlich für IO-Operationen und Netzwerk-Requests in Android-Apps.

Gemeinsamkeiten und Unterschiede zu Java
Die Hosts und Sinthu diskutieren auch, wie Java einige Features von Kotlin übernommen hat, wie zum Beispiel Smart Casting und Verbesserungen beim Switch-Case. Sinthu betont, dass Kotlin und Java interoperabel sind, was bedeutet, dass sie nahtlos zusammenarbeiten können.

Ausblick und Empfehlungen
Abschließend gibt Sinthu wertvolle Tipps für alle, die in die Welt von Kotlin eintauchen möchten. Er empfiehlt, mit der Entwicklung einer einfachen Android-App zu beginnen, um ein Gefühl für die Sprache zu bekommen und erste Erfolgserlebnisse zu sammeln.

Du brauchst einen professionellen Partner für die Erstellung von Web-Apps und Mobile-Apps: https://www.hxcode.io/

Willkommen zum CodeMinds Podcast! Hier bekommst du Interviews, Stories und Hintergrundwissen zur Web- und App-Entwicklung präsentiert von HxCode.

Stefan: Hallo und herzlich willkommen zur sechsten Episode des CodeMinds Podcast. Mein Name ist Stefan.

Janu: Und mein Name ist Janu und ich begrüße euch auch ganz herzlich als Co-Moderator.

Stefan: In dieser Episode bleiben wir thematisch weiter im Java Umfeld. Es gibt viele Programmiersprachen, die die Java Virtuelle Maschine als Ablauf Umgebung nutzen. Neben Java ist die prominenteste Sprache Kotlin. Viele haben von dieser Sprache bestimmt schon im Zusammenhang mit der App-Entwicklung für Android gehört. Kotlin wollen wir uns heute etwas näher anschauen.

Janu: Genau und dazu haben wir uns mal wieder einen Experten eingeladen und sein Name ist Sinthu.

Sinthu: Ja, hallo, danke, dass ich hier sein darf.

Stefan: Du warst Speaker auf dem größten sächsischen IT-Event, dem JUG SaxonyDay. Dort hast du davon gesprochen, wie du deine alte Liebe Java mit Kotlin “betrogen” hast, wie du selbst den Vortrag genannt hast. Das hat mir so gut gefallen, dass wir dich unbedingt in unseren Podcast haben wollten. Aber bevor es losgeht mit der Materie Kotlin, kannst du uns vielleicht ein, zwei Worte zu dir selbst sagen? Wer bist du und was machst du?

Sinthu: Ja, ich bin Softwareentwickler im Automotive-Bereich schon seit einigen Jahren und arbeite bei der Valtec Mobility. Ursprünglich habe ich im Cloud-Bereich auf Java-Spring in Projekten mitgearbeitet, bin aber dann durch Zufall in die Android-Automotive-Entwicklung gekommen. Momentan beschäftige ich mich damit, InCar-Apps zu bauen, für Porsche und Audi, also Apps, die man im Multimedia-System vom Auto benutzen kann.

Janu: Das klingt spannend, das heißt also, in vielen Porsches und Audis läuft deine Software?

Sinthu: Nicht schlecht, klingt gut. Aber kommen wir zum Thema Kotlin. Wie kam es denn zur Entwicklung der Programmiersprache Kotlin?

Sinthu: Also ich denke, es hat sich ergeben, dass Java als Programmiersprache nicht unbedingt alle Features mitgebracht hat, die man sich in der Android-Entwicklung gewünscht hat. Zumindest waren die Leute von JetBrains vor einigen Jahren, vor ich glaube 2010 oder 2011, der Meinung, dass man eine neue Sprache schaffen muss, um die Altlasten, die Java so mit sich bringt, zurückzulassen.

Stefan: Woher kommt der Name Kotlin?

Sinthu: Die Programmiersprache Kotlin wurde ähnlich wie die Programmiersprache Java nach einer Insel benannt. Denn die Macher oder die Erfinder der Sprache kommen ursprünglich aus St. Petersburg und es gibt da eine Insel im finnischen Golf, die genauso heißt, nämlich Kotlin. Man wollte sich quasi an Java orientieren bei der Namensgebung.

Janu: Ich erinnere mich an ein Buch, das hieß „Java ist mehr als nur eine Insel“. Also hier scheint es oft um Inseln zu gehen.

Stefan: Das war auch mein Buch, wo ich in Java so richtig eingestiegen bin. Sehr dicker Wälzer. Du hattest JetBrains erwähnt, die Firma hinter Kotlin, ist das richtig? Kannst du ein bisschen mehr dazu sagen?

Sinthu: Ja, also JetBrains ist uns Entwicklern wahrscheinlich ein Begriff. Sie sind die Entwickler vieler IDEs, die wir jeden Tag im Einsatz haben, unter anderem IntelliJ, aber auch Android Studio.

Stefan: Ist Kotlin eine Open-Source-Sprache? Das heißt, wenn ich Lust habe, etwas daran zu verändern, mitzuentwickeln, hätte ich die Möglichkeit dazu?

Sinthu: Definitiv, es ist Open Source und man kann beitragen, wenn man das möchte.

Janu: Wer entscheidet dann über neue Features und wird das demokratisch gemacht? Hast du da Informationen dazu oder ist das eine Entscheidung von JetBrains?

Sinthu: Das ist eine gute Frage, das weiß ich ehrlich gesagt gar nicht.

Stefan: Ich erinnere mich an Java, da gibt es diese JEPs.

Sinthu: Ja, genau, wo viele Firmen mitentscheiden.

Stefan: Welche Programmierparadigmen unterstützt Kotlin? In Java kennt man ja die objektorientierte Programmierung, ist das auch in Kotlin so?

Sinthu: Ja, tatsächlich gibt es in Kotlin mehrere Paradigmen, in denen man programmieren kann. Objektorientiert, funktional, imperativ. Da gibt es also eine ganze Menge und man ist nicht unbedingt an den objektorientierten Stil gebunden.

Stefan: Das erinnert mich ein bisschen an TypeScript oder an JavaScript, wo viele Programmierparadigmen unterstützt werden. Ich glaube, das ist einfach aus Pragmatismus heraus, dass man eine ausdrucksstarke Sprache haben möchte. Das wird bei Kotlin auch der Grund gewesen sein.

Janu: Wie sieht denn ein einfaches „Hello World“ Programm in Kotlin aus? Ist das einfacher als in Java?

Sinthu: Definitiv. In Kotlin kann man die Main-Methode auch als Top-Level-Funktion deklarieren und braucht nicht unbedingt die Argumentparameter. Man kann einfach schreiben „fun main printline Hello World“, relativ kurz.

Stefan: ‘fun’ steht hier für eine Funktion?

Sinthu: Genau.

Stefan: Kann man das Ganze auch ohne Funktion schreiben, wie in einer Skriptsprache, also einfach nur ‘println hello world’?

Sinthu: Genau, in Java kann man, glaube ich, ab Version 21 die Klasse weglassen, aber ‘fun main’ muss man, glaube ich, immer schreiben.

Janu: Gibt es Playground-Seiten im Internet, wo man das ausprobieren kann?

Sinthu: Ja, die Macher von Kotlin, JetBrains, stellen einen Playground zur Verfügung, wo man seinen Kotlin-Code eintippen und ausführen lassen kann. Das ist ein guter Startpunkt, wenn man sich die Sprache mal kurz anschauen und etwas ausprobieren möchte.

Stefan: Wenn ich auf die Kotlin-Homepage gehe, sehe ich als Headline „Multiplatform“. Kannst du uns darüber etwas erzählen, was das bedeutet?

Sinthu: Kotlin-Multiplatform ist eine Technologie, mit der man Cross-Plattform-Apps entwickeln kann. Es gibt verschiedene Targets wie Web, Desktop, iOS, Android und Server-Anwendungen. Die Grundidee ist, dass man eine Kotlin-Codebase schreibt und dann plattformspezifischen Code.

Janu: Man kann also eine native Anwendung, z.B. eine ‘Exe’ für den Windows-Bereich erstellen?

Sinthu: Genau.

Stefan: Kann man mit Java-Bordmitteln nicht erreichen. Vielleicht könnte man das in Java mit GraalVM erreichen.

Janu: Gerade im Cloud-Umfeld ist das wichtig, dass die Functions schnell starten und antworten können. Wenn ich Kotlin lernen möchte, ist es da noch notwendig, Java zu lernen?

Sinthu: Tatsächlich muss man Java vorher nicht gekannt haben, um gut in Kotlin reinzukommen. Kotlin ist eine Mischung aus verschiedenen Programmiersprachen und sehr einsteigerfreundlich. Wenn man eine dieser Sprachen wie Python, Java oder CSharp schon beherrscht, findet man viele vertraute Strukturen wieder.

Stefan: Ist Kotlin mehr zu empfehlen als Java, wenn man im Jahr 2024 eine Einstiegs-Programmiersprache für ein eigenes Projekt sucht?

Sinthu: Das würde ich nicht so sagen. Es kommt darauf an, was man machen möchte. Kotlin ist sehr gut für die Android-Entwicklung, während Java weiterhin im Enterprise-Bereich weit verbreitet ist.

Janu: Du sagtest, Kotlin wird in der Android-Entwicklung eingesetzt. Gibt es noch andere Einsatzfälle?

Sinthu: Ja, neben Android kann man Kotlin auch für Cloud-Anwendungen nutzen. Ich habe letztes Jahr an einem Projekt gearbeitet, das auf Spring-Kotlin gesetzt hat. Das funktioniert genauso gut wie mit Java.

Stefan: Ich sehe, dass viele große Firmen Kotlin einsetzen, wie Facebook, Pinterest, Evernote, Uber und Atlassian.

Sinthu: Kotlin kann an vielen Stellen eingesetzt werden, wo sonst Java benutzt wird. Beide Sprachen werden zu Bytecode kompiliert, der auf der JVM ausgeführt wird. Sie sind interoperabel, das heißt, man kann Java-Bibliotheken in Kotlin-Projekten verwenden und umgekehrt.

Janu: Was sind die größten Vorteile von Kotlin gegenüber Java? Oft wird die NullPointerException erwähnt.

Sinthu: In Kotlin unterscheidet das Typ-System zwischen nullable und non-nullable types. Man kann Funktionen so schreiben, dass null als Rückgabewert gar nicht erst zugelassen wird. Es gibt auch Optional Chaining, das aus der Web-Entwicklung bekannt ist.

Stefan: Optional Chaining mit den Fragezeichen kenne ich auch aus der JavaScript-Entwicklung. Das Problem der NullPointerExceptions wird vom Runtime-Umfeld zum Compiler-Schritt verschoben. Was ist dein Lieblingsfeature von Kotlin?

Sinthu: Mein Lieblingsfeature sind definitiv Extension Functions. Sie erlauben es, geschlossene Bibliotheken und Klassen durch Verhalten zu erweitern, ohne Vererbung zu benutzen.

Stefan: Kann man diese Funktionserweiterungen im gesamten Projekt auf allen Instanzen der Klasse nutzen?

Sinthu: Ja, aber man sollte aufpassen, dass man diese Funktionserweiterungen nicht global verfügbar macht. Es gibt auch die Möglichkeit, sie nur in einem Modul verfügbar zu machen.

Stefan: Ist das auch gut in der IDE unterstützt?

Sinthu: Definitiv, man bekommt den Import automatisch und Autovervollständigung. Das funktioniert auch mit externen Bibliotheken.

Stefan: Welche IDE setzt du ein?

Sinthu: Ich setze sowohl IntelliJ als auch Android Studio ein.

Janu: Gibt es etwas, das dir an Kotlin nicht gefällt?

Sinthu: Das Exception-Handling in Java ist besser. In Kotlin gibt es keine Checked Exceptions. Man muss sich darauf verlassen, dass der Autor des Codes über eine Annotation mitteilt, dass die Funktion eine Exception werfen kann.

Stefan: Gibt es gute Ressourcen, um Kotlin zu lernen?

Sinthu: Mir hat die offizielle Dokumentation von Kotlin-lang und die Android Developer Dokumentation sehr geholfen. Die meisten Code-Beispiele sind in Kotlin definiert.

Janu: Gibt es in Kotlin primitive Typen wie int oder double?

Sinthu: Nein, es gibt keine primitiven Typen wie int in Kotlin. Das hat den Vorteil, dass man nicht dieses Auto-Boxing-Konstrukt hat, das man aus Java kennt.

Stefan: Hat das Performance-Implikationen?

Sinthu: Historisch betrachtet war das eine Designentscheidung, weil Objekte immer einen gewissen Overhead mit sich bringen. Heutzutage ist das weniger relevant, da unsere Rechner und Handys immer schneller werden.

Stefan: Gibt es noch weitere Language-Features, die dir gefallen?

Sinthu: Neben Extension Functions gibt es Named Arguments und Default Arguments. Named Arguments heben die Reihenfolge der Parameter auf und machen den Code lesbarer. Default Arguments erlauben es, Default-Werte für Parameter festzulegen.

Janu: Was sind CoRoutines?

Sinthu: CoRoutines sind ein Konstrukt, das ähnlich wie async/await funktioniert. Sie werden genutzt, um Code mit Nebenläufigkeiten zu schreiben, z.B. für Rest-Requests oder IO-Operationen.

Stefan: Was hat es mit ‘it’ auf sich bei Kotlin?

Sinthu: ‘it’ ist der implizite Parametername für Scope Functions. Man kann ihn auch umbenennen, wenn man mehrere Scope Functions verschachtelt.

Janu: Kann man ‘it’ nutzen oder auch lesbare Variablennamen?

Sinthu: Ja, man kann auch lesbare Variablennamen nutzen, gerade in Fällen, wo mehrere ‘it’ auftauchen können.

Stefan: Hat Java sich einige Features von Kotlin abgeschaut?

Sinthu: Definitiv. Ein gutes Beispiel ist Smart Casting und der verbesserte Switch-Case. Java hat sich bei vielen Features von Kotlin inspirieren lassen.

Stefan: Haben wir noch weitere Fragen, Janu?

Janu: Vielleicht können wir noch kurz über Kotlin 2 sprechen, das vor zwei, drei Wochen released wurde. Gibt es da Neuerungen?

Sinthu: Tatsächlich habe ich mich mit Kotlin 2 noch nicht näher beschäftigt. Der Release ist erst letzte Woche passiert, und ich muss erst schauen, was es da an neuen Features gibt.

Stefan: Wenn jemand mit Kotlin anfangen möchte, würdest du sagen, eine Android-App zu bauen wäre ein guter Startpunkt?

Sinthu: Absolut. Eine Android-App zu bauen ist sehr lehrreich, da man gleich ein UI hat und direkt sieht, dass etwas passiert. Das ist sehr wertvoll beim Programmieren lernen.

Janu: Der Traum jedes Programmierers ist die eigene App. Wenn eine App sofort etwas Visuelles ausspuckt, ist das immer ein gutes Erfolgserlebnis, ähnlich wie in der Web-Entwicklung, wenn man sofort ein Ergebnis im Browser sieht.

Stefan: Vielen Dank für die lehrreichen Infos über Kotlin. Ich werde mir die Sprache sicher dieses Jahr irgendwann mal anschauen.

Janu: Ich habe auch schon darüber nachgedacht, vielleicht das nächste Projekt in Kotlin zu machen. Vielen Dank, Sinthu, für das Gespräch und deine Erfahrung.

Sinthu: Vielen Dank, es war echt cool hier zu sein.

Stefan: Alles klar, dann bis zum nächsten Mal!

Janu: Ja, bis zur nächsten Episode, macht’s gut!