Rheinwerk Computing < openbook >

 
Inhaltsverzeichnis
Vorwort
Teil I Grundlagen
1 Android – eine offene, mobile Plattform
2 Hallo Android!
3 Von der Idee zur Veröffentlichung
Teil II Elementare Anwendungsbausteine
4 Wichtige Grundbausteine von Apps
5 Benutzeroberflächen
6 Multitasking
Teil III Gerätefunktionen nutzen
7 Telefonieren und surfen
8 Sensoren, GPS und Bluetooth
Teil IV Dateien und Datenbanken
9 Dateien lesen, schreiben und drucken
10 Datenbanken
Teil V Multimedia und Produktivität
11 Multimedia
12 Kontakte und Organizer
A Einführung in Kotlin
B Jetpack Compose
C Häufig benötigte Codebausteine
D Literaturverzeichnis
E Die Begleitmaterialien
Stichwortverzeichnis

Ihre Meinung?
Spacer
<< zurück
Android 11 von Thomas Künneth
Das Praxisbuch für App-Entwickler
Buch: Android 11

Android 11
Pfeil A Einführung in Kotlin
Pfeil A.1 Überblick
Pfeil A.1.1 Hello, Kotlin
Pfeil A.1.2 Beim Start Argumente übergeben
Pfeil A.2 Datentypen
Pfeil A.2.1 Zahlen
Pfeil A.2.2 Zeichen und Zeichenketten
Pfeil A.2.3 Wahrheitswerte
Pfeil A.2.4 Felder
Pfeil A.3 Programmlogik
Pfeil A.3.1 Funktionen
Pfeil A.3.2 Programmfluss
Pfeil A.3.3 Variablen und Eigenschaften
Pfeil A.4 Null-Sicherheit
Pfeil A.4.1 Nullbare Typen
Pfeil A.4.2 Elvis Operator und unsicherer Zugriff
Pfeil A.5 Objektorientierung
Pfeil A.5.1 Einfache Klassen
Pfeil A.5.2 Sekundäre Konstruktoren und init-Blöcke
Pfeil A.5.3 Gleichheit und Identität
Pfeil A.5.4 Vererbung
Pfeil A.6 Fortgeschrittene Themen
Pfeil A.6.1 Singletons und Companion-Objekte
Pfeil A.6.2 Sichtbarkeit
Pfeil A.6.3 Erweiterungen
Pfeil A.6.4 Kompakter Code
Pfeil A.7 Zusammenfassung
 
Zum Seitenanfang

A.4    Null-Sicherheit Zur vorigen ÜberschriftZur nächsten Überschrift

Nicht nur in Java sind null-Referenzen oft ein Grund für Abstürze und Ausnahmen. Viele Programmiersprachen mit Referenztypen haben damit zu kämpfen. Solche Fehler sind nicht selten schwer zu finden, weil sie nur unter ganz bestimmten Bedingungen auftreten und vom Compiler nicht entdeckt werden. Der Computerwissenschaftler Tony Hoare hat die Einführung der Null-Referenz in ALGOL W als seinen billion-dollar mistake bezeichnet.[ 20 ](https://en.wikipedia.org/wiki/Null_pointer)

 
Zum Seitenanfang

A.4.1    Nullbare Typen Zur vorigen ÜberschriftZur nächsten Überschrift

Standardmäßig kann kein Referenztyp in Kotlin den Wert null annehmen. Die Zeile val s: String = null ist ungültig. Wenn Sie in Ihrem Code null-Referenzen verwenden müssen, fügen Sie am Ende des Typs ? hinzu (String?, Int?, ...). Das kommt vor allem bei der Verwendung von Java-Bibliotheken vor, also auch unter Android. Listing A.29 ermittelt eine Zufallszahl. Ist sie 3, wird die Referenz auf null gesetzt. Damit println ( ... ) übersetzt und ausgeführt werden kann, ist if (a != null) nötig.

var a: Int? = (10 * Math.random()).toInt()
if (a == 3)
a = null
if (a != null)
println(a.toString(2))

Listing A.29    Verwendung von nullbaren Typen

Allerdings ist das kein schöner Code. Anstelle der if-Anweisung können Sie schreiben:

println(a?.toString(2))

Das ? sorgt dafür, dass toString(2) nur aufgerufen wird, wenn a nicht null ist. Allerdings, und das ist ein wichtiger Unterschied, wird println() auf jeden Fall ausgeführt. Hat a den Wert null, wird auch »null« ausgegeben. Falls gewünscht, können Sie auf folgende Weise das Verhalten bei if erreichen:

a?.let( {println(it.toString(2))} )

Der Funktion let wird ein Lambda-Ausdruck übergeben. Er erhält den Wert von a in der Variable it, falls a nicht null ist. Sehen Sie sich hierzu ein weiteres Beispiel an:

val l: List<String?> = listOf("Eins", null, "Drei")
for (i in l) {
i?.let { println(it)}
}

Listing A.30    Verwendung von »let«

In Listing A.30 wird eine Liste mit drei Strings definiert. Der zweite ist null. Beim Iterieren über l stellt i? sicher, dass let nur bei "Eins" und "Drei" aufgerufen wird. let ist eine sogenannte Scope-Funktion.[ 21 ](https://kotlinlang.org/docs/reference/scope-functions.html) Die Kotlin-Standardbibliothek enthält mehrere solcher Funktionen. Deren Zweck ist die Ausführung eines Code-Blocks im Kontext eines Objektes. Beim Aufruf einer solchen Funktion mit einem Lambda-Ausdruck wird ein temporärer Scope erzeugt, in dem auf das Objekt ohne seinen Namen zugegriffen werden kann. Außer let gibt es run, with, apply und also. In Listing A.31 werden alle Elemente einer Liste, die ungleich null sind, als Zahl interpretiert und quadriert. also zählt, wie viele dies sind.

var c = 0
val l: List<Int?> = listOf(1, null, 3, 4)
for (i in l) {
i?.let { println(it * it) }
?.also { c++ }
}
println("${l.toString()} hat $c Elemente ungleich null")

Listing A.31    Verwendung der Scope-Funktion »also«

Listing A.32 zeigt die Verwendung von run. Mit indexOf() wird die Position des Kommas in der Zeichenkette »Hallo, Kotlin« ermittelt. Das Ergebnis plus 2 wird an substring() übergeben. println() gibt dann »Kotlin« aus.

val s = "Hallo, Kotlin"
s.run {
println(substring(indexOf(',') + 2))
}

Listing A.32    Verwendung der Scope-Funktion »run«

Ist es nicht äußerst praktisch, die zwei eigentlich notwendigen this weglassen zu können? Der Code wirkt sehr kompakt, bleibt aber verständlich.

 
Zum Seitenanfang

A.4.2    Elvis Operator und unsicherer Zugriff Zur vorigen ÜberschriftZur nächsten Überschrift

Ich hatte Ihnen die let-Funktion in Verbindung mit ? gezeigt, weil ich Code nur ausführen wollte, wenn eine Referenz ungleich null ist. Um auch hier möglichst schlanken und doch verständlichen Quelltext schreiben zu können, kennt Kotlin den Elvis Operator. Er ist in Listing A.33 zu sehen. Seinen Namen hat der Operator in Anspielung an die Frisur des berühmten Rock- and-Roll-Sängers erhalten. Wenn Sie den Kopf beim Betrachten der Zeichenfolge ?: in Richtung linke Schulter neigen, sehen Sie, was ich meine ...

val s: String? = null
println(s?.length ?: -1)

Listing A.33    Verwendung des Elvis Operators

Bitte beachten Sie, dass sich zwischen den zwei Zeichen kein Leerzeichen befinden darf. Das Ergebnis des Operators ist der linke Ausdruck, sofern dieser ungleich null ist, sonst der rechte. Java-Programmierer kennen den ternary operator ? : (mit Leerzeichen). Er funktioniert ähnlich, ist aber flexibler. Dafür kann in Kotlin if als Ausdruck verwendet werden.

Wenn Sie sicher sind, dass die Referenz auf einen nullbaren Typ nicht null ist, können Sie anstelle von ? vor den Zugriff mit . den Operator !! stellen. Das ist in Listing A.34 zu sehen. Da die Variable s mit null initialisiert wird, führt der Zugriff auf length unweigerlich zu einer NullPointerException.

try {
val s: String? = null
println(s!!.length)
} catch (e: NullPointerException) {
println("Crash")
}

Listing A.34    Unsicherer Zugriff mit »!!«

Im folgenden Abschnitt widmen wir uns dem Thema Objektorientierung. Ich zeige Ihnen unter anderem, wie Sie Klassen definieren und Objekte instanziieren.

 


Ihre Meinung?

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de

<< zurück
Zur Rheinwerk-Konferenz für Kotlin
 Buchempfehlungen
Zum Rheinwerk-Shop: Kotlin

Kotlin


Zum Rheinwerk-Shop: Praxisbuch Usability und UX

Praxisbuch Usability und UX


Zum Rheinwerk-Shop: Flutter und Dart

Flutter und Dart


Zum Rheinwerk-Shop: App-Design

App-Design


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und in die Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2023
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 
[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern