Kotlin Bootcamp für Programmers 2: Kotlin-Grundlagen

Dieses Codelab ist Teil des Kotlin-Bootcamps für Programmierer. Sie profitieren von diesem Kurs, wenn Sie nacheinander die Codelabs durcharbeiten. Abhängig von Ihrem Wissen können Sie möglicherweise einige Abschnitte überfliegen. Dieser Kurs richtet sich an Programmierer, die eine objektorientierte Sprache kennen und Kotlin lernen möchten.

Einführung

In diesem Codelab lernen Sie die Grundlagen der Programmiersprache Kotlin kennen: Datentypen, Operatoren, Variablen, Kontrollstrukturen und null- und nicht variablen Variablen. Dieser Kurs richtet sich an Programmierer, die eine objektorientierte Sprache kennen und Kotlin lernen möchten.

Anstatt eine einzige Beispiel-App zu entwickeln, sollten die Lektionen in diesem Kurs auf Ihrem Wissen aufbauen. Sie sind aber unabhängig und können die einzelnen Abschnitte überfliegen. In vielen Beispielen sehen Sie ein Aquarium. Wenn Sie die ganze Geschichte des Aquariums sehen möchten, sollten Sie sich den Kotlin Bootcamp für Programmers Udacity ansehen.

Was Sie bereits wissen sollten

  • Projekt in IntelliJ IDEA erstellen
  • Code in Kotlin mit REID (Read-Eval-Print Loop) in IntelliJ IDEA öffnen und ausführen (Tools > Kotlin > Kotlin REPL)

Lerninhalte

  • Kotlin-Datentypen, Operatoren und Variablen verwenden
  • Mit booleschen Werten und Bedingungen arbeiten
  • Der Unterschied zwischen null- und nicht variablen Variablen
  • Arrays, Listen und Loops in Kotlin

Aufgaben

  • Mit Kotlin REPL die Grundlagen von Kotlin lernen

In dieser Aufgabe erfahren Sie mehr über Operatoren und Typen in der Kotlin-Programmiersprache.

Schritt 1: Numerische Operatoren entdecken

  1. Öffnen Sie IntelliJ IDEA, wenn sie noch nicht geöffnet ist.
  2. Wählen Sie Tools > Kotlin > Kotlin REPL aus, um die Kotlin REPL zu öffnen.

Wie bei anderen Sprachen verwendet Kotlin +, -, * und / für Pluszeichen, Minus, Uhrzeit und Division. Kotlin unterstützt auch verschiedene Zahlentypen, z. B. Int, Long, Double und Float.

  1. Gib die folgenden Ausdrücke in der REPL ein. Drücken Sie nach jedem Ergebnis Control+Enter (Command+Enter auf dem Mac), um das Ergebnis aufzurufen.
1+1
⇒ res8: kotlin.Int = 2

53-3
⇒ res9: kotlin.Int = 50

50/10
⇒ res10: kotlin.Int = 5

1.0/2.0
⇒ res11: kotlin.Double = 0.5

2.0*3.5
⇒ res12: kotlin.Double = 7.0

Beachten Sie, dass die Ergebnisse der Operationen die Operandentypen behalten, also 1/2 = 0, aber 1.0/2.0 = 0.5.

  1. Probieren Sie einige Ausdrücke mit unterschiedlichen Kombinationen von Ganzzahlen und Dezimalzahlen aus.
6*50
⇒ res13: kotlin.Int = 300

6.0*50.0
⇒ res14: kotlin.Double = 300.0

6.0*50
⇒ res15: kotlin.Double = 300.0
  1. Einige Methoden für Nummern aufrufen Kotlin behält die Zahlen als Primitive, aber Sie können damit Methoden für Zahlen so aufrufen, als wären es Objekte.
2.times(3)
⇒ res5: kotlin.Int = 6

3.5.plus(4)
⇒ res8: kotlin.Double = 7.5

2.4.div(2)
⇒ res9: kotlin.Double = 1.2

Schritt 2: Verwendung von Typen

Kotlin konvertiert keine implizit in Zahlentypen, daher können Sie einen Kurzwert nicht direkt einer langen Variablen oder eine Byte einem Int zuweisen. Das liegt daran, dass implizite Zahlenkonvertierungen eine häufige Fehlerquelle bei Programmen sind. Sie können jederzeit verschiedene Typen von Werten zuweisen.

  1. Um einige mögliche Umwandlungen zu sehen, definiere im REPL eine Variable vom Typ Int.
val i: Int = 6
  1. Erstellen Sie eine neue Variable, dann geben Sie den oben angezeigten Variablennamen und dann .to ein.
val b1 = i.to

IntelliJ IDEA zeigt eine Liste möglicher Vervollständigungen an. Die automatische Vervollständigung funktioniert für Variablen und Objekte jedes Typs.

  1. Wählen Sie toByte() aus der Liste aus und drucken Sie die Variable.
val b1 = i.toByte()
println(b1)
⇒ 6
  1. Weisen Sie Variablen verschiedener Typen einen Byte-Wert zu.
val b2: Byte = 1 // OK, literals are checked statically
println(b2)
⇒ 1

val i1: Int = b2
⇒ error: type mismatch: inferred type is Byte but Int was expected

val i2: String = b2
⇒ error: type mismatch: inferred type is Byte but String was expected

val i3: Double = b2
⇒ error: type mismatch: inferred type is Byte but Double was expected
  1. Versuchen Sie, für die Aufgaben, die Fehler zurückgegeben haben, diese zu streamen.
val i4: Int = b2.toInt() // OK!
println(i4)
⇒ 1

val i5: String = b2.toString()
println(i5)
⇒ 1

val i6: Double = b2.toDouble()
println(i6)
⇒ 1.0
  1. Damit lange numerische Konstanten besser lesbar sind, können Sie mit Kotlin an den Stellen, an denen es sinnvoll ist, Unterstriche einblenden lassen. Versuchen Sie es mit anderen numerischen Konstanten.
val oneMillion = 1_000_000
val socialSecurityNumber = 999_99_9999L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010

Schritt 3: Den Wert von Variablentypen erfahren

Kotlin unterstützt zwei Arten von Variablen: austauschbare und veränderbare. Mit val können Sie einen Wert einmal zuweisen. Wenn Sie versuchen, etwas noch einmal zuzuweisen, erhalten Sie eine Fehlermeldung. Mit var können Sie einen Wert zuweisen und den Wert später im Programm ändern.

  1. Definieren Sie Variablen mit val und var und weisen Sie ihnen dann neue Werte zu.
var fish = 1
fish = 2
val aquarium = 1
aquarium = 2
⇒ error: val cannot be reassigned

Du kannst fish einen Wert zuweisen und ihn dann einem neuen Wert zuweisen, da er mit var definiert ist. Wenn Sie aquarium einen neuen Wert zuweisen, wird ein Fehler ausgegeben, weil er mit val definiert ist.

Der Typ, den Sie in einer Variablen speichern, wird abgeleitet, wenn der Compiler ihn aus dem Kontext herausfindet. Wenn Sie möchten, können Sie auch den Typ einer Variablen explizit durch einen Doppelpunkt angeben.

  1. Definieren Sie einige Variablen und geben Sie den Typ explizit an.
var fish: Int = 12
var lakes: Double = 2.5

Nachdem ein Typ von Ihnen oder dem Compiler zugewiesen wurde, können Sie ihn nicht mehr ändern oder es wird eine Fehlermeldung angezeigt.

Schritt 4: Informationen zu Strings

Strings in Kotlin funktionieren im Wesentlichen mit Strings in anderen Programmiersprachen, wobei " für Strings und ' für einzelne Zeichen verwendet wird. Außerdem können Sie Strings mit dem Operator + verketten. Sie können Stringvorlagen erstellen, indem Sie sie mit Werten kombinieren. Der Name $variable wird durch den Text ersetzt, der den Wert darstellt. Dies wird als variable Interpolation bezeichnet.

  1. Stringvorlage erstellen
val numberOfFish = 5
val numberOfPlants = 12
"I have $numberOfFish fish" + " and $numberOfPlants plants"
⇒ res20: kotlin.String = I have 5 fish and 12 plants
  1. Erstellen Sie eine Stringvorlage mit einem Ausdruck. In anderen Sprachen kann der Wert das Ergebnis eines Ausdrucks sein. Mit geschweiften Klammern {} definieren Sie den Ausdruck.
"I have ${numberOfFish + numberOfPlants} fish and plants"
⇒ res21: kotlin.String = I have 17 fish and plants

In dieser Aufgabe erfahren Sie mehr über boolesche Werte und die Bedingungen in der Programmiersprache Kotlin. Wie andere Sprachen verfügt auch Kotlin über boolesche und boolesche Operatoren wie „kleiner“, „gleich“, „größer als“ usw. (<, ==, >, !=, <=, >=).

  1. Schreiben Sie eine if-/else-Anweisung.
val numberOfFish = 50
val numberOfPlants = 23
if (numberOfFish > numberOfPlants) {
    println("Good ratio!") 
} else {
    println("Unhealthy ratio")
}
⇒ Good ratio!
  1. Probieren Sie einen Bereich in einer if-Anweisung aus. In Kotlin können Sie für die Bedingung auch Bereiche verwenden.
val fish = 50
if (fish in 1..100) {
    println(fish)
}
⇒ 50
  1. Schreibe einen if mit mehreren Fällen. Für kompliziertere Bedingungen solltest du logische und && und logische oder || verwenden. Wie in anderen Sprachen können Sie mit else if mehrere Fälle angeben.
if (numberOfFish == 0) {
    println("Empty tank")
} else if (numberOfFish < 40) {
    println("Got fish!")
} else {
    println("That's a lot of fish!")
}
⇒ That's a lot of fish!
  1. Probieren Sie eine when-Anweisung aus. Es gibt eine einfachere Möglichkeit, diese Reihe von if/else if/else-Anweisungen in Kotlin zu schreiben. Dazu wird die when-Anweisung verwendet, die wie die switch-Anweisung in anderen Sprachen ist. Für Bedingungen in einer when-Anweisung können ebenfalls Bereiche verwendet werden.
when (numberOfFish) {
    0  -> println("Empty tank")
    in 1..39 -> println("Got fish!")
    else -> println("That's a lot of fish!")
}
⇒ That's a lot of fish!

In dieser Aufgabe erfahren Sie mehr über Null- und nicht-null-Variablen. Programmierfehler mit Nullen sind die Quelle zahlloser Fehler. Kotlin versucht, Fehler durch Einführung von Variablen, die nicht ungültig sind, zu reduzieren.

Schritt 1: Informationen zur Null-Zulässigkeit

Standardmäßig können die Variablen nicht null sein.

  1. Deklarieren Sie Int und weisen Sie ihr null zu.
var rocks: Int = null
⇒ error: null can not be a value of a non-null type Int
  1. Geben Sie nach dem Typ mit dem Fragezeichenoperator ? an, dass die Variable null sein kann. Deklarieren Sie Int? und weisen Sie ihr null zu.
var marbles: Int? = null

Bei komplexen Datentypen, z. B. einer Liste:

  • Sie können die Elemente der Liste auf null setzen.
  • Sie können zulassen, dass die Liste null sein kann. Wenn sie jedoch nicht null ist, können die Elemente nicht null sein.
  • Sie können sowohl die Liste als auch die Elemente als Null zulassen.

Listen und einige andere komplexe Datentypen werden in einer späteren Aufgabe behandelt.

Schritt 2: Weitere Informationen zum ? und ?:

Sie können null zusammen mit dem Operator ? verwenden, wodurch Sie viele if/else-Anweisungen aussparen müssen.

  1. Schreiben Sie etwas Code länger, um zu prüfen, ob die Variable fishFoodTreats nicht null ist. Dekrementieren Sie dann diese Variable.
var fishFoodTreats = 6
if (fishFoodTreats != null) {
    fishFoodTreats = fishFoodTreats.dec()
}
  1. Sehen Sie sich nun die Kotlin-Datei mit dem Operator ? an.
var fishFoodTreats = 6
fishFoodTreats = fishFoodTreats?.dec()
  1. Nulltests lassen sich auch mit dem Operator ?: verketten. Hier ein Beispiel:
fishFoodTreats = fishFoodTreats?.dec() ?: 0

Sie wird für fishFoodTreatsnicht null reduziert, reduziert und verwendet. Andernfalls wird der Wert nach ?: verwendet, was 0 ist. Wenn fishFoodTreats null ist, wird die Auswertung beendet und die dec()-Methode wird nicht aufgerufen.

Ein Punkt zu Null-Pointern

Wenn du NullPointerExceptions wirklich magst, kannst du sie mit Kotlin beibehalten. Der Not-Assertion-Operator !! (Double-Bang) konvertiert einen beliebigen Wert in einen Typ, der nicht null ist, und löst eine Ausnahme aus, wenn der Wert null ist.

val len = s!!.length   // throws NullPointerException if s is null

In dieser Aufgabe erfahren Sie mehr über Arrays und Listen sowie über verschiedene Methoden zum Erstellen von Schleifen in der Programmiersprache Kotlin.

Schritt 1: Listen erstellen

Listen sind ein grundlegender Typ in Kotlin und ähneln Listen in anderen Sprachen.

  1. Deklarieren Sie eine Liste mit listOf und drucken Sie die Liste aus. Diese Liste kann nicht geändert werden.
val school = listOf("mackerel", "trout", "halibut")
println(school)
⇒ [mackerel, trout, halibut]
  1. Deklarieren Sie eine Liste, die mit mutableListOf geändert werden kann. Element entfernen
val myList = mutableListOf("tuna", "salmon", "shark")
myList.remove("shark")
⇒ res36: kotlin.Boolean = true

Die Methode remove() gibt true zurück, wenn sie das übergebene Element erfolgreich entfernen.

Schritt 2: Arrays erstellen

Wie bei anderen Sprachen gibt es bei Kotlin Arrays. Im Gegensatz zu Listen in Kotlin gibt es keine änderbare und unveränderliche Version von Array. Nachdem Sie ein Array erstellt haben, ist die Größe festgelegt. Sie können keine Elemente hinzufügen oder entfernen, es sei denn, Sie kopieren sie in ein neues Array.

Die Regeln zur Verwendung von val und var sind mit Arrays identisch wie bei Listen.

  1. Deklarieren Sie mit arrayOf ein Array von Strings. Verwenden Sie zum Drucken das Array-Dienstprogramm java.util.Arrays.toString().
val school = arrayOf("shark", "salmon", "minnow")
println(java.util.Arrays.toString(school))
⇒ [shark, salmon, minnow]
  1. Ein mit arrayOf deklariertes Array hat einen Typ, der mit den Elementen verknüpft ist, sodass du Typen mischen kannst. Das ist hilfreich. Ein Array mit verschiedenen Typen deklarieren
val mix = arrayOf("fish", 2)
  1. Außerdem können Sie Arrays mit einem Typ für alle Elemente deklarieren. Geben Sie ein Array von Ganzzahlen mit intArrayOf() an. Für Arrays anderer Typen gibt es entsprechende Builder oder Instanziierungsfunktionen.
val numbers = intArrayOf(1,2,3)
  1. Kombiniere zwei Arrays mit dem Operator +.
val numbers = intArrayOf(1,2,3)
val numbers3 = intArrayOf(4,5,6)
val foo2 = numbers3 + numbers
println(foo2[5])
=> 3
  1. Probieren Sie verschiedene Kombinationen aus verschachtelten Arrays und Listen aus. Wie in anderen Sprachen können Sie Arrays und Listen verschachteln. Wenn Sie also ein Array in ein Array einfügen, haben Sie ein Array, kein vereinfachtes Array des Inhalts der beiden. Die Elemente eines Arrays können auch Listen und die Elemente von Listen Arrays sein.
val numbers = intArrayOf(1, 2, 3)
val oceans = listOf("Atlantic", "Pacific")
val oddList = listOf(numbers, oceans, "salmon")
println(oddList)
⇒ [[I@89178b4, [Atlantic, Pacific], salmon]

Das erste Element numbers ist ein Array. Wenn du es nicht mit dem Array-Dienstprogramm druckst, gibt Kotlin die Adresse statt des Inhalts des Arrays aus.

  1. Ein Vorteil von Kotlin ist, dass Sie Arrays mit Code initialisieren können, anstatt sie mit 0 zu initialisieren. Beispiel:
val array = Array (5) { it * 2 }
println(java.util.Arrays.toString(array))
⇒ [0, 2, 4, 6, 8]

Der Initialisierungscode befindet sich zwischen den geschweiften Klammern, {}. Im Code bezieht sich it auf den Array-Index, der mit 0 beginnt.

Schritt 3: Schleifen erstellen

Da Sie jetzt über Listen und Arrays verfügen, können wie erwartet die Endlosschleife bearbeitet werden.

  1. Erstellen Sie ein Array. Verwenden Sie eine for-Schleife, um das Array zu durchlaufen und die Elemente zu drucken.
val school = arrayOf("shark", "salmon", "minnow")
for (element in school) {
    print(element + " ")
}
⇒ shark salmon minnow
  1. In Kotlin können Sie gleichzeitig Elemente und Indexe durchlaufen. Beispiel:
for ((index, element) in school.withIndex()) {
    println("Item at $index is $element\n")
}
⇒ Item at 0 is shark
Item at 1 is salmon
Item at 2 is minnow
  1. Probieren Sie verschiedene Größen und Bereiche für die Schritte aus. Sie können Bereiche von Zahlen oder Zeichen alphabetisch angeben. Und wie bei anderen Sprachen musst du auch nicht um 1 weiterkommen. Sie können dann mit downTo zurückgehen.
for (i in 1..5) print(i)
⇒ 12345

for (i in 5 downTo 1) print(i)
⇒ 54321

for (i in 3..6 step 2) print(i)
⇒ 35

for (i in 'd'..'g') print (i)
⇒ defg
  1. Probieren Sie einige Schleifen aus. Wie andere Sprachen hat auch Kotlin eine while- und einen do...while-Loop sowie die Operatoren ++ und --. Kotlin hat auch repeat Loop.
var bubbles = 0
while (bubbles < 50) {
    bubbles++
}
println("$bubbles bubbles in the water\n")

do {
    bubbles--
} while (bubbles > 50)
println("$bubbles bubbles in the water\n")

repeat(2) {
     println("A fish is swimming")
}
⇒ 50 bubbles in the water
49 bubbles in the water
A fish is swimmingA fish is swimming

Kotlin ist hinsichtlich der Grundlagen wie Operatoren, Listen und Loops ähnlich wie andere Sprachen. Es gibt jedoch einige wichtige Unterschiede.

Die folgenden Funktionen können in Kotlin anders sein als in anderen Sprachen:

  • Kotlin-Typen können nicht implizit konvertiert werden. Verwende dazu das Streamen.
  • Mit val deklarierte Variablen können nur einmal zugewiesen werden.
  • Kotlin-Variablen sind standardmäßig nicht für null zulässig. Verwenden Sie ?, um Variablen ungültig zu machen.
  • Mit Kotlin können Sie den Index und die Elemente eines Arrays gleichzeitig in einer for-Schleife durchgehen.

Die folgenden Kotlin-Programmierungskonstrukte ähneln denen in anderen Sprachen:

  • Arrays und Listen können einen einzelnen Typ oder gemischte Typen haben.
  • Arrays und Listen können verschachtelt werden.
  • Sie können Schleifen mit for, while, do/while und repeat erstellen.
  • Die when-Anweisung ist die Kotlin-Version der switch-Anweisung, aber when ist flexibler.

Kotlin-Dokumentation

Wenn Sie weitere Informationen zu einem Thema in diesem Kurs benötigen oder nicht mehr weiterkommen, ist https://kotlinlang.org der beste Ausgangspunkt.

Kotlin-Anleitungen

Auf der Website https://try.kotlinlang.org finden Sie umfassende Anleitungen mit dem Namen Kotlin Koans, einem webbasierten Interpreter und eine umfassende Referenz mit Beispielen.

Udacity-Kurs

Informationen zum Udacity-Kurs zu diesem Thema finden Sie im Kotlin-Bootcamp für Programmierer.

IntelliJ IDEA

Die Dokumentation für IntelliJ IDEA finden Sie auf der JetBrains-Website.

In diesem Abschnitt werden mögliche Hausaufgaben für Schüler oder Studenten aufgeführt, die an diesem von einem Kursleiter geleiteten Codelab arbeiten. Die Lehrkraft kann Folgendes tun:

  • Bei Bedarf können Sie die entsprechenden Aufgaben zuweisen.
  • Schülern mitteilen, wie sie Aufgaben für die Aufgabe abgeben
  • Benoten Sie die Hausaufgaben.

Lehrkräfte können diese Vorschläge so oft oder so oft verwenden, wie sie möchten. anderen Aufgaben können sie nach Belieben zugewiesen werden.

Wenn Sie alleine an diesem Codelab arbeiten, können Sie Ihr Wissen mit diesen Hausaufgaben testen.

Diese Fragen beantworten

Frage 1

Durch welche der folgenden Angaben wird eine nicht änderbare Liste von Strings deklariert?

val school = arrayOf("shark", "salmon", "minnow")

var school = arrayOf("shark", "salmon", "minnow")

val school = listOf("shark", "salmon", "minnow")

val school = mutableListOf("shark", "salmon", "minnow")

Frage 2

Wie lautet die Ausgabe des folgenden Codes?
for (i in 3..8 step 2) print(i)

▢ 345678

▢ 468

▢ 38

▢ 357

Frage 3

Welchen Zweck hat das Fragezeichen in diesem Code?
var rocks: Int? = 3

▢ Der Typ der Variablen rocks ist nicht behoben.

▢ Die Variable rocks kann auf null gesetzt werden.

▢ Die Variable rocks kann nicht auf null gesetzt werden.

▢ Die Variable rocks sollte sofort initialisiert werden.

Fahren Sie mit der nächsten Lektion fort: 3. Funktionen

Eine Übersicht über den Kurs, einschließlich Links zu anderen Codelabs, findest du im "Kotlin Bootcamp für Programmierer: Kurs.