Advertisement
  1. Code
  2. Kotlin
Code

Eine Einführung in Kotlin

by
Difficulty:BeginnerLength:MediumLanguages:

German (Deutsch) translation by Max Walsch (you can also view the original English article)

Einführung

Seitdem Apple die Programmiersprache Swift für iOS veröffentlicht hat, wünschen sich viele Entwickler eine ähnliche Sprache für die Android-Entwicklung. Wenn du einer dieser Entwickler bist, wirst du Kotlin, eine JVM-Sprache, die bemerkenswerte Ähnlichkeiten mit Swift aufweist, lieben.

Kotlin ist eine statisch-typisierte Sprache, die von JetBrains entwickelt wird und deren Syntax aussagekräftiger und kürzer als die von Java ist. Mit Eigenschaften, wie Funktionen höherer Ordnung, Lambda-Ausdrücke, dem Überladen von Operatoren, Vorlagen in Strings und vielem weiteren hat Kotlin mehr als Java zu bieten. Da Java und Kotlin vollständig kompatibel sind, können sie gemeinsam im selben Projekt verwendet werden.

Wenn du ein geübter Entwickler in Java bist, wirst du Kotlin bereits in kurzer Zeit erlernt haben. In diesem Tutorial will ich dir zeigen, wie man die wichtigsten Konstrukte von Kotlin nutzt.

Voraussetzungen

Um mir folgen zu können, wirst du folgende Dinge benötigen:

1. Klassen

Um eine Klasse zu erstellen, nutzt man das Schlüsselwort class. Als Beispiel erstellst du eine leere Klasse Person wie folgt: 

Eigenschaften hinzufügen

Eine Klasse hat normalerweise Eigenschaften und Funktionen (auch Methoden genannt). Fügen wir der Klasse Person nun zwei Eigenschaften, name vom Typ String und age vom Typ Int hinzu.

Wie du sehen kannst, unterscheidet sich die Syntax leicht von der von Java. Um eine Variable in Kotlin zu deklarieren, wird das Schlüsselwort var genutzt. Wenn die Variable nur lesend und nur einmal zuweisbar sein soll, wird stattdessen das Schlüsselwort val genutzt.

Aus Gründen der Sicherheit von null-Werten unterscheidet Kotlin zwischen Variablen, die einen null-Wert annehmen und jenen, die niemals null sein können. In unserem vorigen Beispiel können beide Variablen name und age niemals null sein. Sollten sie null sein, wird der Compiler einen Fehler ausgeben.

Um eine Variable zu erstellen, die einen null-Wert annehmen kann, muss ein ? hinter dem Variablen-Typen hinzugefügt werden. Ein Beispiel:

Nun, da wir eine Klasse haben, ist es ein leichtes, eine Instanz dieser zu erstellen:

Nein, Kotlin kennt das Schlüsselwort new nicht. Nachdem die Instanz erstellt wurde, kannst du auf die Eigenschaften auf dieselbe Weise wie in Java zugreifen:

Konstruktoren nutzen

Die individuellen Eigenschaften der Instanz auf dem eben gezeigten Weg zu initialisieren, ist kein guter Programmierstil.  Ein besserer Weg ist, Konstruktoren zu nutzen. Kotlin's Syntax zum definieren solcher Konstruktoren ist sehr kompakt:

Tatsächlich muss nichts weiteres hinzugefügt werden, auch nichts in geschweiften Klammern. Der folgende Code ist lauffähig:

Es ist möglicherweise schon klar, dass es keinen Weg gibt, diesem Konstruktor eigenen Code hinzuzufügen. Dieser Konstruktor, der Teil des Kopfbereichs der Klasse ist, wird primärer Konstruktor genannt.

Um der Klasse weitere Konstruktoren, die sogenannten sekundären Konstruktoren, hinzuzufügen, wird das Schlüsselwort constructor genutzt. Sekundäre Konstruktoren sollten zum primären Konstruktor mithilfe des this-Schlüsselwortes delegieren. Lass uns einen sekundären Konstruktor hinzufügen, der die Eigenschaft namens email initialisiert:

Um eine Instanz mithilfe des sekundären Konstruktors zu erstellen, nutze etwas wie das folgende:

Funktionen hinzufügen

In Kotlin werden Funktionen mithilfe des fun-Schlüsselwortes deklariert. Lass uns eine einfache Funktion namens isEligibleToVote hinzufügen, welche einen Boolean-Wert zurückgibt:

Beachte, dass der Typ des Rückgabewertes am Ende der Funktion angegeben wird. Die Methode kann nun auf dieselbe Weise wie in Java aufgerufen werden:

Erweiterungen erstellen

Kotlin erlaubt eine Klasse um zusätzliche Funktionen zu erweitern, ohne die ursprüngliche Definition zu modifizieren. Solche Funktionen sind als Erweiterungen bekannt. Dem Namen dieser Funktion muss der Name der Klasse, die sie erweitern, vorausgehen.

Als Beispiel fügen wir nun eine Erweiterung namens isTeenager der Klasse Person hinzu, in dem der folgende Code außerhalb der Klasse positioniert wird:

Diese Funktion ist insbesondere dann interessant, wenn du Klassen erweitern willst, die nicht direkt zu deinem Projekt gehören. Als Beispiel fügt der folgende Code eine Erweiterung containsSpaces an die Klasse String an:

Abgeleitete Klassen erstellen

Es ist wichtig, folgende Punkte zu beachten, wenn du eine abgeleitete Klasse erstellst:

  • Du musst : nutzen, anstelle des aus Java bekannten extends Schlüsselworts.
  • Dem Kopf dieser Klasse sollte die Annotation open hinzugefügt werden.
  • Wenn die Basis-Klasse einen Konstruktor mit Parametern aufweist, sollte die abgeleitete Klasse diese Parameter ebenfalls im eigenen Kopfbereich initialisieren.

Erstellen wir eine Klasse namens Employee, welche von Person abgeleitet ist:

Funktionen überschreiben

In Kotlin muss eine Funktion mithilfe der open Annotation im Kopfbereich der Funktion in der Basisklasse, explizit zum überschreiben freigegeben werden. In der abgeleiteten Klassen können diese offenen Funktionen nun mithilfe der override Annotation überschrieben werden.

Um als Beispiel die Methode isEligibleToVote zu überschreiben, wird folgender Code der Employee-Klasse hinzugefügt:

Erstellen statischer Methoden

Kotlin erlaubt keine statischen Methoden. Jedoch erlaubt es das Erstellen von Funktionen auf Paketebene, die keiner Klasse angehören.

Die main-Methode ist möglicherweise die bekannteste statische Methode. Wenn du die main-Methode einem Paket namens com.tutsplus.code.tutorial hinzufügen möchtest, würde dein Code wie folgt aussehen:

2. Funktionen

Du hast bereits in den vorigen Beispielen gelernt, einfache Funktionen zu erstellen. Die Syntax, die du zum erstellen jener Funktionen genutzt hast, ähnelt der von Java sehr. Kotlin erlaubt jedoch noch sehr viel mehr mit Funktionen.

Einzeilige Funktionen erstellen

Wenn eine Funktion den Wert in einem einzigen Ausdruck zurückgibt, kann der =-Operator nach dem Kopfbereich der Funktion, gefolgt von dem Ausdruck genutzt werden, um die Funktion zu deklarieren.

Um beispielsweise der Klasse Person eine Methode hinzuzufügen, die true zurückgibt, wenn die Person achtzigjährig ist, würdest du folgendes schreiben:

Wie du sehen kannst, ist diese verkürzte Syntax deutlich Kompakter und lesbarer.

Funktionen höherer Ordnung und Lambda-Ausdrücke

Funktionen höherer Ordnung sind Funktionen, die Funktionen zurückgeben oder selbige als Parameter akzeptieren. Ein Lambda-Ausdruck ist einfach eine Funktion, die keinen Namen hat. Normalerweise werden Lambda-Ausdrücke und Funktionen höherer Ordnung gemeinsam genutzt.

Betrachten wir das folgende Beispiel, welches die Syntax eines Lambda-Ausdrucks demonstriert:

Das ist ein einfacher Lambda-Ausdruck, der zwei Parameter, x und y, annimmt und deren Summe zurückgibt. Wie du vielleicht schon erraten hast, werden die Parameter der Funktion vor dem ->-Operator angegeben und der Körper der Funktion nach dem ->-Operator. Dieser Lambda-Ausdruck kann einer Variable zugewiesen und wie folgt genutzt werden:

Beachte, dass der Typ der Variable den Lambda-Ausdruck darstellt, der die Typen der Parameter und den Rückgabewert angibt.

Eine Funktion höherer Ordnung zu erstellen, die den vorigen Lambda-Ausdruck als Parameter annimmt, ist einfach. Würdest du beispielsweise eine Funktion erstellen wollen, die den Rückgabewert des Lambda-Ausdrucks verdoppelt, würdest du das wie folgt schreiben:

Du kannst diese Funktion wie folgt aufrufen:

Alternativ kannst du den Lambda-Ausdruck auch direkt in der Funktion höherer Ordnung angeben:

Lambda-Ausdrücke werden oftmals mit Arrays genutzt. Als Beispiel betrachte das folgende Array mit Int-Werten:

Wenn du den Wert jedes Elements im Array quadrieren willst, kannst du die map-Funktion zusammen mit einem Lambda-Ausdruck wie folgt verwenden:

3. Zahlenbereiche

Zahlenbereiche werden in Kotlin häufig genutzt. Du hast sie bereits kennengelernt, während du die Methoden isTeenager und isOctogenarian deklariert hast.

Alles was zum definieren eines Zahlenbereiches benötigt wird, ist der ..-Operator.

Um einen Zahlenbereich in absteigender Reihenfolge zu erstellen, nutzte stattdessen das Schlüsselwort downTo.

Wenn du andere Schritte als 1 nutzen möchtest, kannst du auch eigene Werte mithilfe des step-Schlüsselwortes festlegen.

Du wirst im weiteren Verlauf des Tutorials weitere Ausdrücke für Zahlenbereiche kennen lernen.

4. Bedingte Konstrukte

if

In Kotlin ist if ein Ausdruck, der verschiedene Werte zurückliefert, je nachdem ob eine Bedingung erfüllt ist. Das folgende Beispiel verdeutlicht, wie das funktioniert.

when

Der when-Ausdruck ist das Äquivalent zum switch-Ausdruck in Java. Jedoch ist er deutlich vielseitiger. Betrachte einmal das folgende Beispiel.

Wie du siehst, kann when nicht nur einzelne Werte, sondern auch Ausdrücke als Bedingungen annehmen.

Wiederholte Konstrukte

for..in

In Kotlin kannst du die for..in-Schleife dazu nutzen, um über Arrays, Sammlungen oder alles andere, was einen Iterator bietet, zu iterieren. Die Syntax ist beinahe identisch zu der von Java, außer das der in-Operator anstelle des :-Operators aus Java genutzt wird. Das folgende Beispiel zeigt, wie du über ein Array von String-Objekten iterierst.

Mithilfe der Zahlenbereiche kannst du eine Schleife wie eine altbekannte, C-ähnliche for-Schleife agieren lassen.

while und do..while

Die Syntax der while und do..while-Schleifen ist identisch mit jener in Java. Als Beispiel iteriert der folgende Code über ein Array bestehend aus String-Objekten mithilfe einer while-Schleife:

String Vorlagen

Kotlin erlaubt das einbetten von Variablen und Ausdrücken in Strings, indem diese in geschweiften Klammern gefasst und mit einem $-Symbol eingeleitet werden. Als Beispiel:

Abschluss

In diesem Tutorial hast du die Grundlagen der Programmiersprache Kotlin erlernt. Obwohl wir verschiedene Konstrukte kennengelernt haben, hat Kotlin einiges mehr zu bieten. Tatsächlich ist Kotlin im Juni 2015 nach wie vor nur als Vorschau verfügbar. Es ist also wahrscheinlich, dass weitere Verbesserungen und neue Funktionen in den kommenden Monaten folgen werden.

Wenn du erfahren möchtest, wie du Kotlin im Android Studio nutzt, dann schau mal bei How to Use Kotlin in Your Android Projects vorbei. Um mehr über die Sprache Kotlin zu erfahren, empfehle ich, die Kotlin documentation aufzusuchen.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.