Eine Einführung in Kotlin

Einführung

Seit Apple die Programmiersprache Swift für iOS veröffentlicht hat, wünschen sich viele Android-Entwickler eine ähnliche Sprache für die Android-Entwicklung. Wenn Sie einer dieser Entwickler sind, werden Sie Kotlin lieben, eine JVM-Sprache, die Swift erstaunlich ähnlich ist.

Kotlin ist eine statisch typisierte Sprache, die von JetBrains entwickelt wurde. Ihre Syntax ist ausdrucksvoller und prägnanter als die von Java. Mit Funktionen wie Funktionen höherer Ordnung, Lambda-Ausdrücken, Überladen von Operatoren, String-Vorlagen und mehr bietet Kotlin weit mehr als Java. Da Java und Kotlin in hohem Maße interoperabel sind, können sie zusammen in einem Projekt verwendet werden.

Wenn Sie ein kompetenter Programmierer in Java sind, können Sie Kotlin in sehr kurzer Zeit erlernen. In diesem Tutorial zeige ich Ihnen, wie Sie die am häufigsten verwendeten Konstrukte von Kotlin verwenden.

Voraussetzungen

Um mit mir zu folgen, benötigen Sie:

  • ein gutes Verständnis von Java.
  • die neueste Version des Kotlin-Compilers. Alternativ können Sie den Online-Spielplatz nutzen.

1. Klassen

Um eine Klasse in Kotlin zu erstellen, müssen Sie die Klasse Stichwort. So erstellen Sie beispielsweise eine leere Klasse namens Person:

"Java-Klasse Person

"

Eigenschaften hinzufügen

Eine Klasse verfügt normalerweise über Eigenschaften und Elementfunktionen (auch als Methoden bezeichnet). Fügen wir zwei Eigenschaften hinzu Person Klasse, Name vom Typ String und Alter vom Typ Int.

Java-Variablenname: String = "" Var age: Int = 0

Wie Sie sehen, unterscheidet sich die Syntax zum Erstellen von Variablen geringfügig von der von Java. Um eine Variable in Kotlin zu erstellen, müssen Sie die var Stichwort. Wenn Sie jedoch möchten, dass Ihre Variable eine schreibgeschützte Variable ist, verwenden Sie die val stattdessen ein Schlüsselwort.

Aus Gründen der Nullsicherheit unterscheidet Kotlin auch die möglichen Variablen Null und Variablen, die niemals sein können Null. In unserem vorherigen Beispiel sind beide Variablen Name und Alter kann niemals sein Null. Wenn sie null sind, gibt der Compiler einen Fehler aus.

Eine Variable erstellen, die halten kann Null, Sie müssen eine hinzufügen ? nach dem Typ der Variablen. Zum Beispiel:

Java Var College: Zeichenfolge? = null

Nun, da wir eine Klasse haben, ist das Erstellen einer Instanz einfach:

java var jake = Person ()

Nein, Kotlin hat das nicht Neu Stichwort. Nachdem die Instanz erstellt wurde, können Sie auf ihre Eigenschaften auf dieselbe Weise wie in Java zugreifen:

java jake.name = "Jake Hill" jake.age = 24 jake.college = "Stephens College"

Konstruktoren verwenden

Die individuellen Eigenschaften unserer Instanz auf die gleiche Weise zu initialisieren, ist keine gute Codierpraxis. Eine bessere Möglichkeit wäre, einen Konstruktor zu verwenden. Kotlins Syntax zur Erstellung eines solchen Konstruktors ist sehr kompakt:

"Java-Klasse Person (Variablenname: String, Alter: Int, VarCollege: String?)

"

Wenn Sie Ihrer Klasse nichts weiter hinzuzufügen haben, brauchen Sie keine geschweiften Klammern. Der folgende Code funktioniert einwandfrei:

"Java-Klasse Person (Variablenname: String, Alter: Int, Var College: String?)

var jake = Person ("Jake Hill", 24, "Stephen's College") "

Es ist möglicherweise bereits offensichtlich, dass Sie diesem Konstruktor keine benutzerdefinierten Code hinzufügen können. Dieser Konstruktor, der Teil der Kopfzeile der Klasse ist, wird als primärer Konstruktor bezeichnet.

Um Ihrer Klasse weitere Konstruktoren hinzuzufügen, die als sekundäre Konstruktoren bezeichnet werden, sollten Sie das verwenden Konstrukteur Stichwort. Sekundäre Konstruktoren sollten mit dem Befehl an den primären Konstruktor delegieren diese Stichwort. Fügen wir unserer Klasse einen sekundären Konstruktor hinzu, der den Wert einer Eigenschaft namens initialisiert Email:

"Java-Klasse Person (Variablenname: String, Alter: Int, VarCollege: String?)

var email: String = "" Konstruktor (Name: String, Alter: Int, Hochschule: String?, E-Mail: String): Dies (Name, Alter, Hochschule) this.email = email "

Um eine Instanz mit dem sekundären Konstruktor zu erstellen, schreiben Sie Folgendes:

java var jake = Person ("Jake Hill", 24, "Stephen's College", "[email protected]")

Elementfunktionen hinzufügen

In Kotlin werden Funktionen mithilfe von erstellt Spaß Stichwort. Fügen wir eine einfache Member-Funktion mit dem Namen hinzu isEligibleToVote das gibt ein Boolean Wert:

"java fun isEligibleToVote (): Boolean // Wenn das Alter größer oder gleich 18 ist //, geben Sie true zurück

Rückkehralter> = 18 "

Beachten Sie, dass der Typ des Rückgabewerts am Ende des Funktionsheaders angegeben ist. Sie können diese Methode auf dieselbe Weise wie in Java aufrufen:

java jake.isEligibleToVote ()

Erweiterungen erstellen

Mit Kotlin können Sie eine Klasse erweitern, indem Sie zusätzliche Funktionen hinzufügen, ohne die ursprüngliche Definition zu ändern. Solche Funktionen werden als Erweiterungen bezeichnet. Den Namen dieser Funktionen sollten die Namen der Klassen voranstellen, die sie erweitern.

Zum Beispiel, um eine Erweiterung hinzuzufügen isTeenager zum Person Klasse, schreiben Sie den folgenden Code außerhalb der Klasse:

"java fun Person.isTeenager (): Boolean

// Wenn das Alter in den Bereich // 13-19 fällt, geben Sie das wahre Alter in 13… 19 zurück. "

Diese Funktion ist besonders nützlich, wenn Sie Klassen erweitern möchten, die nicht zur Codebasis Ihres Projekts gehören. Das folgende Codeausschnitt fügt beispielsweise eine Erweiterung hinzu enthältSpaces zum String Klasse:

java fun String.containsSpaces (): Boolean return this.indexOf ("")! = - 1

Abgeleitete Klassen erstellen

Beachten Sie beim Erstellen einer abgeleiteten Klasse Folgendes:

  • Sie müssen eine : anstelle von Java erweitert Stichwort.
  • Der Header der Basisklasse sollte die öffnen Anmerkung.
  • Wenn Ihre Basisklasse über einen Konstruktor verfügt, der Parameter übernimmt, sollte Ihre abgeleitete Klasse diese Parameter im Header selbst initialisieren.

Erstellen wir eine Klasse mit dem Namen Mitarbeiter das stammt von Person:

"java open class Person (Variablenname: String, Alter: Int, Varcollege: String?) …

Mitarbeiter der Klasse (Name: String, Alter: Int, Hochschule: String?, var Firma: String): Person (Name, Alter, Hochschule)

"

Elementfunktionen überschreiben

In Kotlin müssen Sie explizit angeben, dass eine Member-Funktion mit der Funktion überschrieben werden kann öffnen Anmerkung im Kopf der Methode der Basisklasse. In der abgeleiteten Klasse können geöffnete Funktionen mit der Funktion überschrieben werden überschreiben Anmerkung.

Zum Beispiel, um das zu überschreiben isEligibleToVote Methode fügen Sie das folgende Codeausschnitt hinzu Mitarbeiter Klasse:

Java-Überschreibungsspaß isEligibleToVote (): Boolean // Immer true zurückgeben true zurückgeben

Statische Methoden erstellen

In Kotlin können Sie keine statischen Methoden erstellen. Sie können jedoch Funktionen auf Paketebene erstellen, die keiner Klasse angehören.

Das Main Methode ist vielleicht die bekannteste statische Methode. Wenn Sie das hinzufügen möchten Main Methode zu einem Paket namens com.tutsplus.code.tutorial, Dann würde Ihr Code so aussehen:

"Java - Paket com.tutsplus.code.tutorial

fun main (args: Array))

"

2. Funktionen

In den vorherigen Beispielen haben Sie bereits gelernt, wie Sie einfache Funktionen erstellen. Die Syntax, mit der Sie diese Funktionen erstellt haben, war der von Java sehr ähnlich. Mit Kotlin können Sie jedoch noch viel mehr mit Funktionen machen.

Funktionen für einzelne Ausdrücke erstellen

Wenn eine Funktion den Wert eines einzelnen Ausdrucks zurückgibt, können Sie das verwenden = Operator hinter dem Funktionsheader gefolgt von dem Ausdruck, um die Funktion zu definieren.

Zum Beispiel, um dem System eine Methode hinzuzufügen Person Klasse, die zurückkehrt wahr Wenn die Person ein Achtzigjähriger ist, würden Sie schreiben:

Java-Spaß isOctogenarian (): Boolean = Alter in 80… 89

Wie Sie sehen, ist diese Abkürzungssyntax kompakter und lesbarer.

Funktionen höherer Ordnung und Lambda-Ausdrücke

Funktionen höherer Ordnung sind Funktionen, die Funktionen zurückgeben oder Funktionen als Parameter akzeptieren können. Ein Lambda-Ausdruck dagegen ist nur eine Funktion, die keinen Namen hat. Normalerweise werden Lambda-Ausdrücke und Funktionen höherer Ordnung zusammen verwendet.

Betrachten Sie das folgende Beispiel, das die Syntax eines Lambda-Ausdrucks veranschaulicht:

Java x, y -> x + y

Dies ist ein einfacher Lambda-Ausdruck, der zwei Parameter akzeptiert, x und y, und gibt ihre Summe zurück. Wie Sie vielleicht schon vermutet haben, sind die Parameter der Funktion vor dem aufgeführt -> Operator und der Körper der Funktion beginnt nach dem -> Operator. Dieser Lambda-Ausdruck kann einer Variablen zugewiesen und wie folgt verwendet werden:

java val sumLambda: (Int, Int) -> Int = x, y -> x + y val actualSum = sumLambda (3,4)

Beachten Sie, dass der Typ der Variablen, die den Lambda-Ausdruck enthält, die Typen seiner Parameter und ihren Rückgabewert angibt.

Das Erstellen einer Funktion höherer Ordnung, die den obigen Lambda-Ausdruck als Parameter akzeptieren kann, ist genauso einfach. Um beispielsweise eine Funktion zu erstellen, die das Ergebnis des Lambda-Ausdrucks verdoppelt, würden Sie Folgendes schreiben:

java fun doubleTheResult (x: Int, y: Int, f: (Int, Int) -> Int): Int return f (x, y) * 2

Sie können diese Funktion wie folgt aufrufen:

java val result1 = doubleTheResult (3, 4, sumLambda)

Alternativ können Sie den Lambda-Ausdruck direkt an die Funktion höherer Ordnung übergeben:

java val result2 = doubleTheResult (3, 4, x, y -> x + y)

Lambda-Ausdrücke werden häufig bei Arrays verwendet. Betrachten Sie beispielsweise das folgende Array von Int Werte:

Java-Val-Zahlen: Array = arrayOf (1, 2, 3, 4, 5)

Wenn Sie den Wert jedes Elements im Array ein Quadrat bilden möchten, können Sie das verwenden Karte funktionieren zusammen mit einem Lambda-Ausdruck wie folgt:

"java val squaredNumbers = numbers.map (x -> x * x)

// Ergebnis wird ein neues Array sein, das // 1, 4, 9, 16, 25 "enthält.

3. Bereiche

Bereichsausdrücke werden in Kotlin sehr häufig verwendet. Sie haben sie bereits beim Erstellen des verwendet isTeenager und isOctogenarian Methoden.

Um einen Bereich zu erstellen, brauchen Sie nur die Operator.

"java val r1 = 1… 5

// Dieser Bereich enthält die Nummer 1, 2, 3, 4, 5 "

Um einen Bereich in absteigender Reihenfolge zu erstellen, verwenden Sie die bis zu Funktion stattdessen.

"java val r2 = 5 downTo 1

// Dieser Bereich enthält die Nummer 5, 4, 3, 2, 1 "

Wenn Sie nicht wollen, dass der Schritt ist 1, Sie können einen benutzerdefinierten Wert mithilfe von angeben Schritt Funktion.

"java val r3 = 5 downTo 1 step 2

// Dieser Bereich enthält die Nummer 5, 3, 1 "

Später in diesem Lernprogramm werden weitere Bereichsausdrücke angezeigt.

4. Bedingte Konstrukte

ob

In Kotlin, ob ist ein Ausdruck, der abhängig davon, ob die Bedingung erfüllt ist, unterschiedliche Werte zurückgibt. Das folgende Beispiel zeigt, wie das funktioniert.

"java var age = 20 val isEligibleToVote = wenn (Alter> 18)" Ja "oder" Nein "

// isEligibleToVote wird jetzt auf "Ja" gesetzt

wann

Das wann Ausdruck entspricht Javas Schalter. Es ist jedoch viel vielseitiger. Betrachten Sie zum Beispiel das folgende Beispiel.

"java val age = 17

val typeOfPerson = wann (Alter) 0 -> "Neugeboren" in 1 ... 12 -> "Kind" in 13 ... 19 -> "Jugendlicher" sonst -> "Erwachsener"

// typeOfPerson wird jetzt auf "Teenager" gesetzt

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

5. Schleifen von Konstrukten

für in

In Kotlin können Sie die für in Schleife zum Durchlaufen von Arrays, Sammlungen und anderen Elementen, die einen Iterator bereitstellen. Seine Syntax ist fast identisch mit der von Java, außer für die Verwendung von im Operator anstelle von Java : Operator. Das folgende Beispiel zeigt, wie Sie ein Array von durchlaufen String Objekte.

"java val names = arrayOf (" Jake "," Jill "," Ashley "," Bill ")

für (Name in Namen) println (Name) "

Mit Hilfe von Bereichsausdrücken können Sie diese Schleife wie einen traditionellen C-Stil verhalten, zum Schleife.

"Java für (i in 0… 9) println (i)

// Verhält sich genau wie // für (int i = 0; i<10;i++)"

während und mache… während

Die Syntax von während und mache… während Schleifen in Kotlin sind identisch mit der in Java verwendeten Syntax. Der folgende Kotlin-Code durchläuft beispielsweise ein Array von String Objekte mit einem während Schleife:

"java val names = arrayOf (" Jake "," Jill "," Ashley "," Bill ") var i = names.size ()

while (i> 0) println (Namen [-i]) "

6. String-Vorlagen

Mit Kotlin können Sie Variablen und Ausdrücke in Strings einbetten, indem Sie sie in ein Paar geschweifte Klammern einfassen, denen ein a vorangestellt ist $ Symbol. Zum Beispiel:

"java val name =" Bob "println (" Mein Name ist $ Name ") // Druckt" Mein Name ist Bob "

val a = 10 val b = 20 println ("Die Summe ist $ a + b") // Druckt "Die Summe ist 30" "

Fazit

In diesem Lernprogramm haben Sie die Grundlagen der Programmiersprache Kotlin gelernt. Obwohl wir hier mehrere Konstrukte behandelt haben, hat Kotlin noch viel mehr zu bieten. Tatsächlich ist Kotlin ab Juni 2015 nur noch als Vorschau verfügbar. In den kommenden Monaten wird es wahrscheinlich mehrere Verbesserungen und neue Funktionen geben.

Wenn Sie wissen möchten, wie Sie Kotlin in Android Studio verwenden, lesen Sie unter So verwenden Sie Kotlin in Ihren Android-Projekten. Um mehr über die Kotlin-Sprache zu lernen, empfehle ich die Kotlin-Dokumentation.