Sie benutzen einen alten Browser.

Bitte updaten Sie Ihren Browser damit Sie diese Seite so sehen, wie wir das geplant haben ...

Freitag, 30. August 2019 / Gepostet von Yannick Pulver

Kotlin: Die neue Standardsprache für die Entwicklung von Android Apps

Kotlin ist inzwischen die standartmässige Programmiersprache für die Entwicklung von nativen Android Apps. Mit dem Projekt Five up haben wir zum ersten mal eine Android App nur mit Kotlin entwickelt. In diesem Blog möchten wir einige Fragen beantworten, die rund um das Thema immer mal wieder auftauchen.

Was ist Kotlin?

Kotlin ist eine Programmiersprache, wie auch Java, Python, C++ und co. Der Kotlin Code kann zu Bytecode für Java Virtual Machine (JVM), JavaScript-Quellcode oder auch direkt in Maschinencode umgewandelt werden. Weniger technisch ausgedrückt bedeutet dies, dass die Sprache für die Entwicklung von Programmen für verschiedene Plattformen verwendet werden kann. Kotlin wird von JetBrains entwickelt, welche unter anderem auch für ihre Entwicklungsumgebungen wie IntelliJ IDEA bekannt sind. Im Vergleich mit der Programmiersprache Java, welche 1995 erschien, ist Kotlin noch eher neu (Erscheinungsjahr 2011).

Seit der Ankündigung an der Google I/O 2017 wird Kotlin offiziell für die Android Entwicklung unterstützt. Seit diesem Sommer ist Kotlin die von Google bevorzugte Sprache für die Android-Entwicklung und löst damit Java ab. Kein Wunder, denn bereits an der Droidcon 2018, wurde kaum noch Java Code auf den Folien der Referierenden gezeigt. Dies zeigt deutlich, dass die Unterstützung von Kotlin von der Android-Community sehr begrüsst, ja sogar gefeiert wird.

Kotlin löst Java als Standard-Programmiersprache für Android ab
Source: https://devsmeme.com/kotlin-an-emerging-language-for-android-apps/kotlin-an-emerging-language-for-android-apps/

Wie unterscheidet sich Kotlin von Java? Was sind die Vor- und Nachteile gegenüber Java?

Kotlin hilft dabei, den wesentlichen Code etwas besser darzustellen als Java. Das Weglassen von Semikolons, expliziten Typdeklarationen und dem “new”-Keyword sind nur drei von vielen nennenswerten Verschiedenheiten. In den folgenden Abschnitten werden einige Änderungen etwas umfangreicher vorgestellt.


Null Handling

Wird mit Java entwickelt, so besteht die Möglichkeit jeder Variable von jedem Typ "null" zuzuweisen. Null steht dabei grundsätzlich für "nichts". Kurzsichtig betrachtet, erscheint dies in gewissen Fällen praktisch. Damit dieses Verhalten unter Kontrolle bleibt, muss teilweise geprüft werden, ob die Variablen null oder nicht null sind. Dies fordert dazu auf, den Code mit if-Schleifen zu füllen. Werden diese Abfragen nicht gemacht, so kann es womöglich zu einem Fehler vom Typ "NullPointerException" kommen. (Jede(r) Java-Entwickler(in) hat dies bestimmt schon erlebt).

In Kotlin werden die Null-Werte hingegen über das Typensystem kontrolliert. Dies bedeutet, dass eine Variable generell nicht null sein kann, ausser sie wird spezifisch als "nullable" mit Fragezeichen gekennzeichnet (Siehe Code Snippet). Damit erübrigen sich die erwähnten if-Schleifen in vielen Szenarien. Und falls es doch mal eine Überprüfung braucht, so stellt Kotlin einige praktische Scope Funktionen wie "let" zur Verfügung.

var user = User("Maria", "Bernasconi") // Diese Variable kann nie auf null gesetzt werden
var child: User? = null // Diese Variable kann null sein durch das "?"

// ...

child?.father = user // Wird nur ausgeführt wenn die Variable nicht null ist

addToList(child!!.name) // Wirft eine Exception wenn null:
child?.let { name -> addToList(name) } // Das "addToList" wird nur ausgeführt, wenn child nicht null 
child?.let { addToList(it) } // das "it" steht für "it -> .." und kann so abgekürzt werden

Nice to know: Mit dem Elvis-Operator kann bei der Zuweisung eine if-Schleife umgangen werden.

val bonus = child ?: user // Elvis Operator: Wenn "child" nicht null, dann "child" zugewiesen, sonst "user"


Data Klassen

Häufig werden Klassen erstellt, welche nur Daten beinhalten. In Architektur Konzepten wie MVVM oder MVP werden solche Klassen als "Model" gekennzeichnet. In Java beinhalten solche Klassen viele Zeilen an repetitivem Code mit sogenannten "Getters" und "Setters", welche der Entkapselung der Variabeln dienen. Kotlin vereinfacht die Erstellung von solchen Models mit Data Klassen. Mittels nur einer Zeile Code kann die wesentlich grössere Klasse von Java ersetzt werden.

// Kotlin
data class User(val prename: String, val name: String)
// Java
public class User {
	private final String prename;
    private final String name;
    
    public Person(String prename, String name) {
    	this.prename = prename;
        this.name = name;
    }
    
    public String getPrename() {
    	return age;
    }
    
    public String getName() {
    	return name;
    }
    
    // Setters
}

Ebenfalls wird in der Anwendung der Klasse auf alles Unnötige verzichtet. Anstatt die Verwendung von "Getters" wird direkt auf den Variablennamen zugegriffen. Dies hilft durchaus, die Leserlichkeit des Codes zu verbessern.

// Kotlin
val user = User("Maria", "Bernasconi")
println(user.prename)
// Java
User user = new User("Maria", "Bernasconi");
System.out.println(user.getPrename());


Extension Functions

Mit der Hilfe von Extension Functions kann die Funktionalität von Klassen erweitert werden. Diese Erweiterung geschieht, ohne die Klasse selbst zu verändern. Für eigene Klassen bietet sich dies eher weniger an, für nicht-beeinflussbare Klassen wie Android-Klassen, lässt sich dies jedoch gut einsetzen. Wir haben diese Extension Functions z.B. dafür eingesetzt, das Setzen der “Visibility” zu verschönern. Das hilft dabei, den Code grundsätzlich besser lesbar zu machen und weniger-leserliche, repetitive Teile in solche Extension Functions auszulagern.

Diese Funktionen sollten jedoch mit Vorsicht verwendet werden. Zu viele Erweiterungen können dazu führen, dass der Code nur durch dessen Entwickler gut verstanden werden kann.

// View.kt
fun View.visible() {
this.visibility = View.VISIBLE
}

fun View.gone() {
this.visibility = View.GONE
}

fun View.visible(bool: Boolean) = if (bool) visible() else gone()

Die Anwendung dieser Extension Functions verläuft wie folgt:

// main-fragment.kt
imageView.visible() // set ImageView to visible

val show = true
imageView.visible(show) // set ImageView visible or gone, depending on variable

Diese drei beschriebenen Änderungen in Kotlin sind nur wenige von vielen, welche die Sprache gegenüber Java sehr angenehm zum Entwickeln machen. Die offizielle Kotlin Dokumentation bietet noch viele weitere Beispiele, wie die Sprache sinnvoll eingesetzt werden kann: kotlinlang.org.

Wieso haben wir Kotlin bei Five up eingesetzt?

Wie schon kurz erwähnt: Als Android Entwickler ist es derzeit schwierig, um Kotlin herum zu kommen. Auf den Google Ressourcen werden Java Code-Beispiele nur zweitrangig oder gar nicht mehr dargestellt. Für die Weiterentwicklung von bestehenden Projekten schien es nicht sinnvoll, nur einzelne Klassen in Kotlin zu schreiben. Deshalb bot sich die frische Entwicklung von Five up perfekt für Kotlin an.

Kotlin wird von Android Devs gegenüber Java bevorzugt
Source: https://me.me/i/android-devs-java-kotlin-1545ecb2828c45c99a3defc91919b639

Ein halbes Jahr nach dem Launch: Hat sich die Wahl bewährt?

Zu Beginn gab es viel Code, welcher in “Java-mässigem Kotlin” programmiert wurde. Bereits nach kurzer Zeit gelang es uns dann aber, die Fähigkeiten von Kotlin sinnvoll einzusetzen. Im Projektverlauf haben wir auch bemerkt, dass bekannte Libraries immer öfter auf Kotlin umsteigen und so von Funktionalitäten wie Extension Functions Gebrauch machen.

Die Entwicklungsumgebung Android Studio hilft dabei sehr, denn sie wandelt automatisch Java Code zu Kotlin um, wenn dieser in eine Kotlin-Datei kopiert wird. Das Spiel funktioniert auch umgekehrt. Man hat die Möglichkeit, den Java-Code der Kotlin-Datei anzuschauen. Dies kann hier und da helfen, um ein besseres Verständnis für Kotlin aufzubauen.

Bei Five up haben wir ebenfalls auf die Android Architecture Components gesetzt. Diese Kollektion von Libraries definiert die von Google bevorzugte Architektur von Android Apps. Obwohl sich diese Libraries auch mit Java einsetzen lassen, ist die Handhabung mit Kotlin deutlich intuitiver.

«With great power comes great responsibility.»

— Stan Lee

Um also die Frage zu beantworten: Ja! Die Verwendung von Kotlin war der richtige Schritt. Besonders da Kotlin jetzt als primäre Sprache für Android gilt. Aber wie mit allem, gibt es auch Punkte, welche gegen Kotlin sprechen. Einige davon sind in folgendem Artikel zusammengefasst: Why Kotlin Sucks

Gibt es im “Unterhalt” Unterschiede verglichen mit Java?

Kotlin wird aktiv entwickelt und kann sich so regelmässig über neue Funktionalitäten und Verbesserungen erfreuen. Zudem hat man die Möglichkeit, bei Kotlin als Open-Source Contributor mitzuwirken.

Wir verwenden eine ähnliche Architektur wie jene, die wir auch für Java Projekte einsetzen. Der Unterhalt der Projekte bleibt daher eigentlich gleich. Der Vorteil ist, dass sich Entwickler schnell im Projekt einfinden, egal ob Java oder Kotlin verwendet wird.

Wird sich Kotlin bei der Entwicklung von Android Apps durchsetzen? Werden wir neue Projekte nur noch mit Kotlin machen?

Kotlin hat sich bereits klar durchgesetzt. Der Weg zurück zu Java scheint längerfristig keine gute Idee zu sein. Spätestens wenn in der Zukunft Googles Libraries nur noch für Kotlin entwickelt werden. Es muss nun weiter versucht werden, Kotlin so gut wie möglich in bestehenden und zukünftigen Projekten einzubinden.

Werden wir alte Projekte auf Kotlin “migrieren”?

Alte Projekte zu migrieren, scheint nicht sinnvoll zu sein. Wir setzen uns aber als Ziel, neue Features nur noch mit Kotlin zu schreiben. Dies kann dazu führen, dass einige ältere Projekte mit der Zeit komplett aus Kotlin bestehen werden. Kurzfristig werden wir aber um die Entwicklung mit Java nicht herum kommen. Da wir nun aber die Vorteile von Kotlin kennen, werden wir sicherlich versuchen, eher Kotlin als Java einzusetzen.

Yannick Pulver

Android Development

Unser Android Dev mit Stil! Er könnte in Paris das neue Dior Gesicht werden, aber es zieht ihn eher in die Berge, wo er die schöne und reiche Natur beobachtet. Gut so, wer will schon zu Dior, wenn man bei Apps with love an der Zukunft schrauben kann?

Das könnte dich auch interessieren

App Trends Illustration Keyvisual Apps with love Blog
11. Mai 2018

15 APP MARKT UND TECHNOLOGIE TRENDS

Diese App und Tech-Trends werden die Softwarebranche in den nächsten zwei Jahren beschäftigen. Blockchain, KI, 5G, PWAs, VR, AI-Chatbots, AMP, ...

Apps with love an der Droidcon in Turin 2018
26. April 2018

droidcon Turin 2018  - Rückblick & Highlights

Unsere Android Entwickler Yannick und Adel haben die droidcon in Turin besucht. In diesem Blog beschreibt Yannick seine Eindrücke und Highlights.

25. Oktober 2017

Play & Error - Wie unser Unternehmen fit und gesund bleibt

Ein Unternehmen braucht keine Wachstumsstrategie sondern eine Kulturstrategie. Wer als Team die Firma weiterentwickelt hält sie gesund und fit.

Map of journey from Syria to Switzerland
27. Juni 2017

DREAMS AND WISHES - MY JOURNEY FROM SYRIA TO SWITZERLAND

Deaa Chaleh, developer at Apps with love, had to flee his home country Syria. Here is the story of how he ended up in Switzerland.

26. April 2017

App Builders 2017 - Conference Review

App Builders Switzerland, Lausanne, April 17: An amazing event, providing lots of interesting inputs & inspiration which we share with you in our blog

Lohnmodell von Apps with love
12. April 2017

Dieses Lohnmodell macht Lohnverhandlungen überflüssig und schafft Lohngerechtigkeit

Löhne werden oft verhandelt wie auf dem Teppichbasar. Unser neues Lohnmodell fördert Transparenz und Gleichberechtigung im Personalwesen.

Apps with love Know How für die App Entwicklung
20. Januar 2017

7 entscheidende Tipps für eine erfolgreiche App

Die App-User Experience, der Mehrwert im Kontext, das Projektteam, oder deine Denkweise sind wichtige Erfolgsfaktoren für die App Entwicklung.

18. Juli 2016

Vorteile von User Research in der App Entwicklung

Die User im Fokus - Wie Apps with love User Research systematisch und kontinuierlich in die App Entwicklung integriert.

Apps with love Teamwork und Kultur
19. Juni 2016

WIE EIN KULTURELLES RÜCKGRAT JEDES UNTERNEHMEN STÄRKEN KANN.

Erfolg misst sich nicht nur an Wachstum und vollen Auftragsbüchern. Wir haben ein regelmässiges Kultur Board eingeführt mit erstaunlichen Ergebnissen.

04. März 2016

App USER ONBOARDING TEIL 2

Die Hälfte der Nutzer öffnet eine App kein zweites Mal. Was kann man dagegen tun? Die Antwort liegt beim allzu oft vergessenen User Onboarding.

07. Februar 2016

DER ERSTE EINDRUCK ZÄHLT – USER ONBOARDING TEIL 1

Rund die Hälfte der App-User öffnet eine App kein zweites Mal! Was kann man dagegen tun? Die Antwort liegt beim App User Onboarding.

23. Januar 2016

PROTECT YOUR APPLICATIONS' GUTS

Software protection is a topic that is becoming increasingly important, especially since the emergence of ubiquitous and mobile computing.

03. Dezember 2015

DESIGN VS. TECHNOLOGY

Sind programmierende Designer die besseren Interaction Designer? Sind gestaltende Programmierer die besseren Interface Programmierer? App Knowhow

22. Juni 2015

APP VERMARKTUNG – MIT SYSTEM ZUM ERFOLG

Wer eine App anbietet, muss diese auch aktiv vermarkten. Wie dies am besten funktioniert und welche Schritte nötig steht in diesem Blogbeitrag.

11. November 2014

IN 7 SCHRITTEN BIS ZUR APP - ENTWICKLUNGSPROZESS

Existierende Denkrichtungen und Ansätze im Projektmanagement sind nicht schlecht. Wir haben jedoch unseren eigenen App Entwicklungsprozess designed.