Kotlin ist eine moderne Programmiersprache, die Java-Bytecode kompiliert. Es ist kostenlos und Open Source und verspricht, die Kodierung für Android noch mehr Spaß zu machen.
Im vorigen Artikel haben Sie sich mit Variablen, einfachen Typen, Arrays, Kommentaren und Typinferenz in Kotlin vertraut gemacht. In diesem Lernprogramm lernen wir die Sprache weiter, indem wir die Nullfähigkeit, die Schleifen und die Bedingungen in Kotlin betrachten.
Wenn Sie ein Android-Programmierer sind, müssen Sie auf das Infame gestoßen sein NullPointerException
Fehler in Ihrer App. Diese treten immer dann auf, wenn Sie versuchen, eine Methode aufzurufen oder eine Eigenschaft einer Objektreferenz zu lesen Null
.
Die gute Nachricht ist, dass Kotlin uns helfen kann, diese Art von Fehlern zu vermeiden, da es sich um eine sichere Sprache handelt. Das bedeutet, dass Variablen nicht den Wert null haben können, wenn Sie ihren Typ nicht explizit als nullfähig deklarieren. Mit anderen Worten, Typen können standardmäßig nicht null sein. Mal sehen, wie wir mit dieser Funktion von Kotlin Fehler in unserem Code vermeiden können.
Wertname: String = null // wird nicht kompiliert
Wie Sie oben sehen können, wenn wir vergeben Null
zum Name
Variable, beschwert sich der Compiler. Damit der Compiler die Zuweisung zulässt, deklarieren Sie den Namen durch Hinzufügen als Nullwert ?
nach dem Typ.
Wertname: String? = null // kompiliert name = "Chike" // neuer Wert ist "Chike"
Beachten Sie, dass wenn ?
Wird nach einem beliebigen Typnamen eingefügt, haben wir den Compiler explizit angewiesen, dass der Wert des Typs entweder eine Objektreferenz speichern kann oder sein kann Null
-es ist nullfähig. Hier haben wir das mit gemacht String
Typ, aber es funktioniert genauso mit Int?
, Byte?
, Lange?
, Meine Klasse?
, und so weiter.
?.
Erfahren Sie mehr über die Funktionsweise von null-safety in Kotlin mit einem Operator namens Safe Call Operator ?.
.
var name: String? = null print (name.length) // wird nicht kompiliert
Der obige Code wird nicht kompiliert, da Kotlin eine nullsichere Sprache ist. Die Variable Name
wird der Wert zugewiesen Null
. Nun wird die Eigenschaft aufgerufen Länge
auf diese Variable würde ein auslösen NullPointerException
Fehler in Java. Der Kotlin-Compiler lässt jedoch den Aufruf dieser Eigenschaft nicht zu, da die Variable dies sein könnte Null
. Der Compiler erlaubt uns nicht, etwas zu tun, das eine generieren könnte NullPointerException
!
val v: String? = null print (v? .length) // kompiliert und druckt "null"
Jetzt fügen Sie den Operator für sichere Anrufe hinzu ?.
Auf die Variable vor dem Aufrufen der Eigenschaft haben wir den Compiler explizit angewiesen, die Eigenschaft nur dann aufzurufen, wenn der Wert nicht ist Null
. Wenn der Wert ist Null
, Der Compiler verwendet den String "Null"
als Wert für uns. Dies funktioniert auch für Methoden und nicht nur für Eigenschaften.
Wenn Sie eine Methode mit Nullwert aufrufen, ist der Rückgabetyp ebenfalls Nullwert. So zum Beispiel der Rückgabetyp von v & lgr;
Ausdruck wann v
ist nullfähig wird sein Int?
.
val v: String? = null val len: Int? = v? .length print (len) // kompiliert und druckt "null"
Um die Nullfähigkeitsprüfung durch den Kotlin-Compiler zu umgehen, können Sie das ersetzen ?.
Betreiber mit !!.
. Dies wird jedoch aufgrund der hohen Wahrscheinlichkeit nicht empfohlen NullPointerException
Fehler, falls verwendet.
val v: String? = null val len: Int? = v !!. length print (len) // löst einen NullPointerException-Fehler aus
?:
Dieser Operator ?:
wird als Elvis-Operator bezeichnet (weil seine Form wie der Kopf von Elvis aussieht). Es wird verwendet, um einen alternativen Wert für die Variable anzugeben, falls dies der Fall ist Null
.
val username = null val name: String = Benutzername?: "No name" print (name) // kompiliert und druckt "No name"
Hier hat der Compiler die Zeichenfolge zugewiesen "Kein Name"
auf die Variable Name
, weil der erste Wert Benutzername ist Null
. Wenn der erste Wert nicht war Null
, dann würde dieser Wert stattdessen der Variablen zugewiesen.
Kotlin hat while, do-while und für Loops.
während
SchleifeMit einer Wiederholungsanweisung können wir angeben, dass der Code eine Aktion wiederholen soll, während eine Bedingung erfüllt bleibt.
Also in Kotlin mit der während
Schleife ist die gleiche wie in anderen Sprachen wie Java.
while (Bedingung) // Code hier ausführen while (Kraftstoff> 5) driveMeAroundLagos ()
Solange die Bedingung erfüllt ist, wird der Code innerhalb der geschweiften Klammern oder des Körpers der Schleife ausgeführt. Wenn die Bedingung falsch ist, wird der Code nicht ausgeführt. In unserem obigen Beispiel wird die Bedingung falsch, sobald die Kraftstoffvariable weniger als 5 Liter beträgt, und die Schleife wird beendet. Mit anderen Worten, driveMeAroundLagos ()
Die Ausführung der Methode wird angehalten.
mache… während
SchleifeKotlin hat auch die mache… während
Schleifenkonstrukt.
do // Code hier ausführen while (Bedingung)
Das ist ähnlich dem während
Aussage. In der while-Schleife testet das Programm die Schleifenbedingung am Anfang der Schleife, bevor der Körper der Schleife ausgeführt wird. Wenn die Bedingung falsch ist, wird der Rumpf nicht ausgeführt. Aber die mache es
loop testet die Bedingung, nachdem der Körper der Schleife ausgeführt wurde. Das bedeutet, dass der Körper mindestens einmal ausgeführt wird.
zum
SchleifeEIN zum
Schleife ist eine Wiederholungsanweisung, die es uns ermöglicht, Objekte zu durchlaufen, während eine bestimmte Bedingung erfüllt ist.
for (Wert im Bereich) // Code ausführen
In Kotlin die zum
Das Schleifenkonstrukt arbeitet mit einer Iteration über Bereiche, Sammlungen oder andere iterierbare Elemente (mehr dazu im nächsten Post). Für Loops arbeiten Sie mit der im
Operator, der verwendet wird, um festzustellen, ob ein Wert in einem bestimmten Bereich vorhanden ist.
für (a in 1… 5) print ("$ a") // wird gedruckt 1 2 3 4 5
Im obigen Code durchlaufen wir einen geschlossenen Bereich von 1 bis 5 und drucken jeden Wert in diesem Bereich aus.
Wir können die verwenden withIndex ()
Funktion oder die Indizes
Eigenschaft eines Arrays zur Wiederholung eines Arrays, in dem der Index für jedes Element benötigt wird.
withIndex ()
FunktionWir können über ein Array iterieren, um auf den Index jedes Elements zuzugreifen, indem Sie den withIndex ()
Funktion auf dem Array, weil die withIndex ()
Funktion gibt eine Iteration von zurück Indexwert
Typ für jedes Element. Auf diese Weise können wir von jedem Element auf den Index und den Wert für jedes Element zugreifen.
val numbersArray = intArrayOf (1,2,3,4,5) für ((Index, Wert) in numbersArray.withIndex ()) print ("$ index index value ist $ value \ n")
Der obige Code gibt das Ergebnis unten aus:
0 Indexwert ist 1 1 Indexwert ist 2 2 Indexwert ist 3 3 Indexwert ist 4 4 Indexwert ist 5
Indizes
EigentumDarüber hinaus können wir die verwenden Indizes
Eigenschaft auf dem Array. Dadurch wird nur der Bereich gültiger Indizes für das Array zurückgegeben.
val numbers1 = intArrayOf (1,2,3,4,5) für (Index in Numbers1.indices) print ("$ index index value ist $ numbers1 [index] \ n")
Der obige Code liefert das gleiche Ergebnis wie im vorherigen Beispiel. Sie können hier auch sehen, dass wir den Index verwenden können, um auf ein Array-Element zuzugreifen, ähnlich wie andere Programmiersprachen wie Java.
Kotlin hat drei Arten von Bedingungsanweisungen: die ob
, ansonsten
, und wann
Aussagen.
ob
AussageEin ob
Anweisung führt Code aus, wenn eine Bedingung wahr ist, oder überspringt sie einfach, wenn die Bedingung falsch ist. Nichts Besonderes hier: ob
Anweisungen funktionieren ähnlich wie in den meisten anderen Programmiersprachen, einschließlich Java.
val number = 20 if (number% 2 == 0) print ("$ number ist durch 2 teilbar") // 20 ist durch 2 teilbar
Wir können auch überprüfen, ob eine Variable von einem bestimmten Typ ist ist
Stichwort.
if (number ist Int) print ("$ number ist eine ganze Zahl")
ansonsten
AussageDas ansonsten
führt eine Aktion aus, wenn die Bedingung wahr ist, und führt eine andere Aktion aus, wenn die Bedingung falsch ist.
val number = 13 if (number% 2 == 0) print ("$ number ist teilbar durch 2") else print ("$ number ist nicht teilbar durch 2") // 13 ist nicht teilbar durch 2
Ein Hauptmerkmal, das das unterscheidet ansonsten
Eine Anweisung in Kotlin aus anderen Programmiersprachen wie Java ist die Möglichkeit, eine Variable aus dem zurückgegebenen Wert von zuzuweisen ansonsten
Aussage. Dies ist möglich weil ein ansonsten
Anweisung kann nicht nur als Anweisung, sondern auch als Ausdruck in Kotlin verwendet werden.
val number = 13 val result = if (number% 2 == 0) "$ number ist teilbar durch 2" else "$ number ist nicht teilbar durch 2" print (result) // 13 ist nicht teilbar durch 2
Im obigen Code haben wir die Ergebnis
Variable mit einem String
Objekt basierend auf dem Zustand des ansonsten
Aussage. Beachten Sie, dass dies nur die letzte Anweisung in einem bestimmten Bedingungsblock zurückgibt und dass Sie auch keine verwenden können ob
ohne ein sonst
als Ausdruck.
val result = if (number% 2 == 0) "Teilbar durch 2" "Nummer ist $ number" // Nur diese Zeichenfolge wird zurückgegeben, wenn sie ausgeführt wird else "Nicht teilbar durch 2" "Number ist $ number"
wann
AusdruckKotlin stellte das vor wann
konstruiere als ersatz für das vertraute Schalter
Anweisung haben wir in verschiedenen Programmiersprachen wie C ++, Java und so weiter. wann
ist prägnanter und verfügt über leistungsfähigere Funktionen als das Schalter
Aussage, mit der Sie vielleicht vertraut sind.
Das wann
Die Anweisung führt verschiedene Aktionen basierend auf den möglichen Werten einer Konstante des Typs aus Int
, String
, Byte
, Kurz
, oder irgendein anderes Objekt.
fun guessTheNumber (number: Int) wenn (number) 1 -> println ("number is 1") 2 -> println ("number is 2") 3 -> println ("number is 3") else -> println ("Zahl ist weder 1, 2 oder 3")
Im obigen Code haben wir die Funktion übergeben rateTheNumber ()
ein Zahlenparameter (wir werden Funktionen in Kotlin in einem späteren Beitrag besprechen). Das wann
Der Ausdruck prüft dann, ob einer der Zweige mit dem Wert von übereinstimmt Nummer
und führt dann die Aktion in diesem Zweig aus. Wenn keine der Niederlassungen übereinstimmt, wird die sonst
Verzweigung wird ausgeführt.
Eine andere Variante der wann
Ausdruck erfordert kein Argument, wie im folgenden Beispiel.
fun guessTheNumber (number: Int) wenn number == 1 -> println ("number is 1") number == 2 -> println ("number is 2") number == 3 -> println ("number is 3.) ") else -> println (" Zahl ist weder 1, 2 noch 3 ")
Wenn wir mehr als eine Aktion für einen Zweig ausführen möchten, müssen wir die Aktionen in geschweifte Klammern einschließen .
val number = 2 when (number) 1 -> println ("number is 1") 2 -> // Block des ausgeführten Codes println ("number is 2") println ("es ist eine gerade Zahl") 3 -> println ("Nummer ist 3")
Darüber hinaus können wir Testwerte in einem Zweig zusammenfassen.
val number = 2 when (number) 1, 2 -> println ("number ist entweder 1 oder 2") // number ist entweder 1 oder 2 3 -> println ("number is 3")
Hier wird der erste Zweig ausgeführt, weil wir entweder einen Wert von 1 oder 2 testen.
In diesem Lernprogramm haben Sie die Nullfähigkeit, Schleifen und Bedingungen in der Programmiersprache Kotlin kennen gelernt. Im nächsten Tutorial der Kotlin From Scratch-Serie erfahren Sie mehr über die APIs für Bereiche und Sammlungen in Kotlin. Bis bald!
Um mehr über die Kotlin-Sprache zu lernen, empfehle ich die Kotlin-Dokumentation. Oder sehen Sie sich einige unserer anderen Kotlin-Tutorials hier bei Envato Tuts an+!