KM_Compose_v3

Workshop | Kotlin Multiplatform mit Compose

Von am 03.03.2025

Meinen erster Workshop in der Masterklasse Mobile im 1. Semester hielt ich zum Thema Kotlin Multiplatform mit Compose.
Ziel dieses Workshops war es, den Teilnehmern sowohl eine kurze Einführung in die Programmiersprache Kotlin zu geben, als auch einen groben Überblick über die Cross-Platform-Technologie Kotlin Multiplatform inklusive dem deklarativen Design-Toolkit Compose.
Nachdem die Teilnehmer schon mit der Programmiersprache Java vertraut waren, konzentrierte ich mich bei der Theorie zu Kotlin hauptsächlich auf die Unterschiede und Vorteile in der Sprache im Vergleich zu Java.
Nach dem Theorieteil zu den drei Themen wurde gemeinsam mit den Teilnehmern eine Übung am Projektor durchgeführt.

Kotlin

Einführung: was ist Kotlin?

Kotlin ist eine Open-Source-Programmiersprache, die von JetBrains entwickelt wurde und seit der stabilen Version von 2016 verfügbar ist. Seit 2017 wird sie offiziell für die Android-Entwicklung unterstützt und 2021 zur bevorzugten Sprache für diese Plattform erklärt. Kotlin hat eine wachsende Community, was sich unter anderem in den Stack Overflow Surveys zeigt. Die Sprache wird sowohl von JetBrains als auch von Google unterstützt, was ihre Weiterentwicklung und Verbreitung fördert.

Einsatzbereiche

Kotlin wird in verschiedenen Bereichen der Softwareentwicklung eingesetzt. Besonders verbreitet ist die Nutzung in der Android-Entwicklung, aber auch im Server-Backend, wo es mit Frameworks wie Ktor, das speziell für Kotlin entwickelt wurde, und Spring Boot verwendet wird. Für die Web-Entwicklung gibt es Kotlin/JS, das die Nutzung von Kotlin im Frontend ermöglicht. Zudem kann Kotlin für Desktop-Anwendungen eingesetzt werden, beispielsweise mit JavaFX. Ein weiteres wichtiges Merkmal ist die Unterstützung für Multiplatform-Entwicklung, wodurch Kotlin-Code plattformübergreifend genutzt werden kann.

Warum Kotlin (statt Java)?

Kotlin bietet im Vergleich zu Java eine einfachere, aber zugleich mächtigere Syntax, die weniger Boilerplate-Code erfordert und dadurch kürzer, prägnanter und besser lesbar ist. Die integrierte Null-Safety reduziert das Risiko von NullPointerExceptions, was die Zuverlässigkeit des Codes erhöht. Besonders in großen Projekten erleichtert Kotlin die Wartbarkeit und verbessert die Code-Qualität. Zudem ist Kotlin vollständig interoperabel mit Java, da der Code zu Java-Bytecode kompiliert wird, was eine nahtlose Integration in bestehende Java-Projekte ermöglicht.

Nützliche Sprachfeatures

Kotlin bietet eine Vielzahl nützlicher Sprachfeatures, die die Entwicklung effizienter und übersichtlicher machen. Automatische Getter und Setter vereinfachen den Umgang mit Klassen, indem sie Standardmethoden für den Zugriff auf Eigenschaften automatisch generieren. Die integrierte Null-Safety verhindert NullPointerExceptions, indem sie eine explizite Behandlung von null-Werten erzwingt. Dank der Typinferenz muss der Datentyp oft nicht explizit angegeben werden, da Kotlin ihn automatisch ableitet. Default-Parameter ermöglichen es, Funktionen mit voreingestellten Werten zu definieren, wodurch überladene Methoden reduziert werden. Mit Extension-Functions lassen sich bestehende Klassen um neue Funktionen erweitern, ohne sie direkt zu verändern. Zudem unterstützen Lambdas und High-Order Functions eine funktionale Programmierweise, indem sie Funktionen als Parameter übergeben oder zurückgeben können, was den Code flexibler und ausdrucksstärker macht.
Codebeispiele hierzu können in den Folien betrachtet werden, angehängt weiter unten.

Kotlin Multiplatform

Einführung: Was ist Kotlin Multiplatform?

Kotlin Multiplatform ist ein natives Cross-Platform-Framework, das 2017 von JetBrains veröffentlicht wurde. Es ermöglicht die Entwicklung für Android, iOS, Web und Desktop mit einer flexiblen Codebasis. Dabei wird hauptsächlich die geschäftslogische Logik zwischen den Plattformen geteilt, während die UI individuell gestaltet werden kann. Mit Compose ist es jedoch auch möglich, UI-Komponenten plattformübergreifend zu nutzen. Der expect/actual-Mechanismus erlaubt die Implementierung plattformspezifischen Codes, wenn bestimmte Funktionen für eine Plattform individuell angepasst werden müssen.

Compose

Einführung: Was ist Compose?

Compose ist ein modernes, deklaratives UI-Toolkit, das von JetBrains entwickelt wurde und keine Trennung zwischen Layout und Logik erfordert. Es ist Teil des Jetpack-Toolkits auf Android (Jetpack Compose) und gilt als state-of-the-art Methode zur UI-Entwicklung, da es das bisherige View-System mit separaten XML-Layout-Dateien abgelöst hat. Darüber hinaus ist Compose in Kotlin Multiplatform nutzbar, wobei Compose Multiplatform eine erweiterte, plattformübergreifende Version bietet, mit der sich UIs für verschiedene Plattformen effizient entwickeln lassen.

Composables

Composables sind die grundlegenden Bausteine einer UI in Compose. Sie sind spezielle Funktionen, die mit der Annotation @Composable versehen sind und dazu dienen, UI-Elemente deklarativ zu erstellen. Anstatt eine separate Layout-Struktur zu verwenden, ermöglichen Composables eine direkte und flexible Gestaltung der Benutzeroberfläche innerhalb des Kotlin-Codes. (Codebeispiel in den Folien)

State Changes

In Jetpack Compose reagieren Composables dynamisch auf Änderungen von States. Wenn sich ein State ändert, wird die betroffene Composable-Funktion automatisch neu ausgeführt (re-composed), um die UI entsprechend zu aktualisieren. Dadurch bleibt die Benutzeroberfläche stets synchron mit den aktuellen Daten, ohne dass manuell UI-Elemente geändert oder aktualisiert werden müssen. (Codebeispiel in den Folien)

Layouts

Jetpack Compose bietet flexible Layout-Komponenten wie Column, Row und Box, die zur strukturierten Anordnung von UI-Elementen verwendet werden. Diese Layouts können beliebig verschachtelt werden, um komplexe Benutzeroberflächen effizient zu gestalten. Durch das deklarative Konzept lassen sich Layouts intuitiv definieren und dynamisch anpassen.

Übungsbeispiel: Notizen-App

Als Übungsbeispiel, das mit allen Teilnehmern des Workshops gemeinsam durchgemacht wurde, habe ich eine simple Notizen-App ausgewählt.

Durch die Übung wurde demonstriert, wie schnell man mit Hilfe von Kotlin Multiplatform eine App für Android, iOS und das Web erstellen kann.
Als Beispiel für den expected/actual-Mechanismus, um plattformspezifischen Code zum Projekt hinzuzufügen, wurden die Notizen in einem lokalen Speicher persistiert. (z.B. SharedPreferences auf Android, LocalStorage im Web).


Der Sourcecode der während dem Workshop implementierten App kann hier heruntergeladen werden:

Beitrag kommentieren

(*) Pflichtfeld