Theis | Einstieg in Kotlin | E-Book | www.sack.de
E-Book

E-Book, Deutsch, 526 Seiten

Reihe: Rheinwerk Computing

Theis Einstieg in Kotlin

Apps entwickeln mit Android Studio
2. Auflage 2021
ISBN: 978-3-8362-8535-3
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection

Apps entwickeln mit Android Studio

E-Book, Deutsch, 526 Seiten

Reihe: Rheinwerk Computing

ISBN: 978-3-8362-8535-3
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection



Einfach und ohne Vorkenntnisse Kotlin lernen. Mit IntelliJ IDEA lernen Sie die Sprache kennen und steigen dann in die App-Entwicklung mit Android Studio ein. Lernen Sie Schritt für Schritt alle wichtigen Sprachkonzepte kennen. Erfahren Sie, wie Sie Bedienoberflächen programmieren, auf verschiedene Sensoren und Systemdienste zugreifen, Daten speichern, Audio- und Videoaufnahmen weiterverarbeiten und selbstverständlich auch, wie Sie Ihre Apps veröffentlichen.
Ganz gleich, ob Sie von Java umsteigen oder Programmieranfänger sind - Kotlin hat einiges zu bieten, was eingefleischte Anwender anderer Sprachen lockt und für Neulinge von vornherein ein Plus darstellt. Thomas Theis bleibt seinem anfängerfreundlichen Stil auch dann treu, wenn es ein wenig schwieriger wird.

Aus dem Inhalt:

  • Alle Grundlagen der Programmierung
  • IntelliJ IDEA und Android Studio installieren
  • Verzweigungen, Schleifen und Co.
  • Funktionen und funktionale Programmierung
  • Layouts und Menüs aufbauen
  • Standard-Dialoge
  • Sensoren nutzen
  • Spiele und Trainings entwickeln
  • Datenbanken zur Speicherung
  • Gestensteuerung
  • Zugriffsrechte verwalten


Thomas Theis ist Dipl.-Ing. für Technische Informatik und arbeitet als Berater und Trainer. Seit vielen Jahren gibt er als EDV-Dozent Kurse in verschiedenen Programmiersprachen. Er ist Autor vieler erfolgreicher Fachbücher.
Theis Einstieg in Kotlin jetzt bestellen!

Autoren/Hrsg.


Weitere Infos & Material



  Materialien zum Buch ... 20
  1.  Einführung ... 21

       1.1 ... Kotlin und Android ... 21
       1.2 ... Aufbau dieses Buchs ... 22
       1.3 ... Installation von IntelliJ IDEA ... 23
       1.4 ... Das erste Projekt ... 26

  2.  Variablen, Datentypen und Operatoren ... 29

       2.1 ... Das erste Programm ... 29
       2.2 ... Zeichenketten ... 31
       2.3 ... Ganze Zahlen ... 33
       2.4 ... Zahlen mit Nachkommastellen ... 37
       2.5 ... Rechenoperatoren ... 43
       2.6 ... Logische Werte ... 47
       2.7 ... Nullbare Datentypen ... 51

  3.  Kontrollstrukturen ... 57

       3.1 ... Verzweigungen mit »if« ... 57
       3.2 ... Verzweigungen mit »when« ... 61
       3.3 ... Schleifen mit Bedingungen ... 63
       3.4 ... Schleifen über Bereiche ... 69
       3.5 ... Ausnahmebehandlung ... 71
       3.6 ... Eingaben des Benutzers ... 74

  4.  Daten strukturieren und speichern ... 79

       4.1 ... Array ... 79
       4.2 ... ArrayList ... 83
       4.3 ... Speichern und Lesen in Textdateien ... 85

  5.  Funktionen ... 89

       5.1 ... Grundlagen ... 89
       5.2 ... Vorgabewerte ... 96
       5.3 ... Variable Parameterlisten ... 97
       5.4 ... Externe Funktionen ... 99
       5.5 ... Rekursive Funktionen ... 101
       5.6 ... Erweiterungsmethoden ... 102
       5.7 ... Rückgabewerte destrukturieren ... 103
       5.8 ... Anonyme Funktionen ... 105
       5.9 ... Callback-Funktionen ... 108
       5.10 ... Gültigkeit und Konstanten ... 113
       5.11 ... Debugging ... 115

  6.  Zahlen, Texte und Zeit ... 121

       6.1 ... Mathematik ... 121
       6.2 ... Zahlensysteme und Bit-Operationen ... 125
       6.3 ... Zeichenketten ... 129
       6.4 ... Zeitangaben mit der Klasse Calendar ... 135
       6.5 ... Zeitangaben mit den Local-Klassen ... 139

  7.  Datenstrukturen ... 143

       7.1 ... Arrays, weitere Möglichkeiten ... 143
       7.2 ... Sets ... 150
       7.3 ... Maps ... 153
       7.4 ... Umwandlungen ... 156

  8.  Objektorientierte Programmierung ... 159

       8.1 ... Klassen und Objekte ... 160
       8.2 ... Konstruktoren und Initialisierung ... 166
       8.3 ... Einzigartige Objekte ... 173
       8.4 ... Operatormethoden ... 178
       8.5 ... Datenklassen ... 184

  9.  Vererbung und mehr ... 187

       9.1 ... Ableitung von Klassen ... 187
       9.2 ... Interfaces ... 193
       9.3 ... Abstrakte Klassen ... 197

10.  Entwicklung von Android-Apps ... 203

       10.1 ... Installation von Android Studio ... 203
       10.2 ... Die erste App ... 205
       10.3 ... Ein Projekt im Android Studio ... 208
       10.4 ... App auf virtuellem Gerät starten ... 215
       10.5 ... App auf realem Gerät starten ... 222

11.  Layout, Ressourcen und Ereignisse ... 225

       11.1 ... Layout und Ressourcen ... 225
       11.2 ... Tipps zur Arbeit mit Projekten ... 239
       11.3 ... Ereignisse verarbeiten mit dem »View Binding« ... 243
       11.4 ... Listener-Objekte ... 251
       11.5 ... Logging ... 260

12.  Views zur Eingabe und Auswahl ... 263

       12.1 ... Texte und Zahlen eingeben ... 263
       12.2 ... Werte einstellen mit SeekBars ... 269
       12.3 ... Einfache Auswahl ... 274
       12.4 ... Mehrfache Auswahl ... 278
       12.5 ... Views für Bilder ... 284

13.  Zeitangaben und zeitliche Abläufe ... 289

       13.1 ... Datum und Uhrzeit eingeben ... 289
       13.2 ... Datum auswählen mit CalendarView ... 294
       13.3 ... Datum auswählen mit DatePickerView ... 296
       13.4 ... Uhrzeit auswählen mit TimePickerView ... 299
       13.5 ... Zeitliche Abläufe steuern ... 302
       13.6 ... Mehrere zeitliche Abläufe ... 307

14.  Weitere Layouts und Activitys ... 309

       14.1 ... FrameLayout ... 309
       14.2 ... Lebenszyklus einer Activity ... 315
       14.3 ... Mehrere Activitys ... 317
       14.4 ... Ergebnisse einer Activity ... 323
       14.5 ... Listen und Tabellen ... 328

15.  Gesten, Dialoge und Menüs ... 335

       15.1 ... Antippen ... 335
       15.2 ... Ziehen ... 339
       15.3 ... Wischen ... 341
       15.4 ... Zoomen ... 344
       15.5 ... Dialoge ... 347
       15.6 ... Benachrichtigungen ... 352
       15.7 ... Aktionsmenü ... 356
       15.8 ... Kontextmenüs ... 360

16.  Transformationen und Animationen ... 365

       16.1 ... Transformationen ... 365
       16.2 ... Animationen ... 373
       16.3 ... Interpolatoren ... 379
       16.4 ... Kollisionen ... 383

17.  App-Daten speichern ... 387

       17.1 ... Schlüssel-Wert-Paare ... 387
       17.2 ... Textdatei ... 390
       17.3 ... SQLite-Datenbank ... 395

18.  Sensoren und Audio ... 409

       18.1 ... Sensoren für die Lage ... 409
       18.2 ... Sensoren für die Umgebung ... 419
       18.3 ... Audiodateien abspielen ... 424

19.  Systemdienste ... 433

       19.1 ... Einzelne Systemberechtigung ... 433
       19.2 ... Mehrere Systemberechtigungen ... 439
       19.3 ... Standort ermitteln ... 445
       19.4 ... Content-Provider ... 450
       19.5 ... Daten vorbereiten ... 457

20.  Beispielprojekte ... 461

       20.1 ... Rechentrainer »BruchTraining« ... 461
       20.2 ... Reaktionsspiel »Quadrate« ... 469
       20.3 ... Reaktionsspiel »Zoo« ... 476

  Anhang ... 477

       A ... Virtuelle Geräte verwalten ... 479
       B ... App veröffentlichen ... 481
       C ... Installationen unter Ubuntu Linux ... 491
       D ... Installationen unter macOS ... 501
       E ... Weiterführende Links ... 509

  Index ... 511


2.4    Zahlen mit Nachkommastellen


Zahlen mit Nachkommastellen, auch Fließkommazahlen genannt, werden in Variablen des Datentyps Float oder in Variablen des Datentyps Double gespeichert. Float-Variablen sind nicht so genau wie Double-Variablen. Zudem verfügt der Datentyp Float über einen kleineren Zahlenbereich. Allerdings benötigen Float-Variablen weniger Speicherplatz.

Bei der Ausgabe werden die Nachkommastellen standardmäßig mithilfe des (englischen) Dezimalpunkts abgetrennt. Im Projekt ZahlKomma werden Float- und Double-Variablen anhand einiger Beispiele erläutert.

2.4.1    Datentyp »Float«


Es folgt zunächst Teil 1 des Projekt-Programms:

fun main() {
val f1 = 2.375f
var f2: Float
f2 = 1.0f / 7.0f
println("Float: $f1 $f2")
println("Grenzen: ${Float.MAX_VALUE} ${Float.MIN_VALUE}\n")
...
}

Listing 2.7     Projekt »ZahlKomma«, Teil 1 von 4

Der unveränderlichen Variablen f1 wird der Float-Wert 2.375f zugewiesen. Die Nachkommastellen und das Zeichen f am Ende sorgen dafür, dass sie zu einer Float-Variablen wird. Die veränderliche Variable f2 wird als Float-Variable deklariert. Sie erhält später ihren Wert als Ergebnis der Division der beiden Float-Werte 1.0f und 7.0f.

Die Klasse Float beinhaltet ebenso die Konstanten MIN_VALUE und MAX_VALUE mit den Grenzen des Zahlenbereichs.

Die Ausgabe dieses Programmteils:

Float: 2.375 0.14285715
Grenzen: 3.4028235E38 1.4E-45

Anhand der Ausgabe sehen Sie, dass Float-Werte nur mit einer Genauigkeit von sechs bis sieben Stellen nach dem Komma gespeichert werden. Zum Rechnen mit einer größeren Genauigkeit werden Double-Variablen benötigt.

Sehr große oder sehr kleine Werte werden im Exponentialformat ausgegeben. Die Angabe 1.5e9 würde der Zahl 1,5 × 109 entsprechen, also der Zahl 1.500.000.000. Die Angabe 1.5e-9 würde der Zahl 1,5 × 10–9 entsprechen, also der Zahl 0,0000000015. Die beiden Werte in der Ausgabe repräsentieren die Zahlen 3,4028235 × 1038 bzw. 1,4 × 10-45.

2.4.2    Datentyp »Double«


Nachfolgend Teil 2 des Programms:

fun main() {
...
val d1 = 2.375
var d2: Double
d2 = 1.0 / 7.0
println("Double: $d1 $d2")
println("Grenzen: ${Double.MAX_VALUE} ${Double.MIN_VALUE}\n")
...
}

Listing 2.8     Projekt »ZahlKomma«, Teil 2 von 4

Der unveränderlichen Variablen d1 wird der Double-Wert 2.375 zugewiesen, ohne f am Ende. Die Nachkommastellen sorgen dafür, dass sie zu einer Double-Variablen wird. Die veränderliche Variable d2 wird als Double-Variable deklariert. Sie erhält später ihren Wert als Ergebnis der Division der beiden Double-Werte 1.0 und 7.0.

Auch hier beinhaltet die zugehörige Klasse Double die Konstanten MIN_VALUE und MAX_VALUE mit den Grenzen des Zahlenbereichs.

Die Ausgabe dieses Programmteils:

Double: 2.375 0.14285714285714285
Grenzen: 1.7976931348623157E308 4.9E-324

Sie sehen, dass Double-Werte mit einer Genauigkeit von 15 bis 16 Stellen nach dem Komma gespeichert werden. Zudem ist der Zahlenbereich wesentlich größer.

Versuchen Sie, einen Wert zuzuweisen, der oberhalb des Zahlenbereichs liegt, erscheint eine Warnung, und es wird der Wert Infinity (dt.: unendlich) angenommen. Mit diesem Wert können Sie keine Berechnungen mehr vornehmen. Versuchen Sie, einen Wert zuzuweisen, der unterhalb des Zahlenbereichs liegt, erscheint eine Warnung, und es wird der Wert 0 angenommen.

2.4.3    Exponentialwerte


Wie bereits erwähnt, bieten Exponentialwerte die Möglichkeit, mit sehr großen oder sehr kleinen Werten zu arbeiten, ohne viele Nullen vor oder nach dem Komma anzugeben. Ihre Werte werden im Code mithilfe eines e oder E gekennzeichnet. Es folgt Teil 3 des Programms:

fun main() {
...
val e1 = 1.5e9
val e2 = 1.5e-9
println("Exponential: $e1 $e2\n")
...
}

Listing 2.9     Projekt »ZahlKomma«, Teil 3 von 4

Die Ausgabe dieses Programmteils:

Exponential: 1.5E9 1.5E-9

2.4.4    Formatierung


Soll eine Zahl mit Nachkommastellen formatiert, also auf eine bestimmte Anzahl an Nachkommastellen gerundet werden, haben Sie verschiedene Möglichkeiten.

Zunächst der vierte und letzte Teil des Programms:

import java.text.NumberFormat
import java.util.Locale
import kotlin.math.*

fun main() {
...
val nfg = NumberFormat.getInstance()
nfg.maximumFractionDigits = 3
println("DE-Format: " + nfg.format(d2))

val nfu = NumberFormat.getInstance(Locale.US)
nfu.maximumFractionDigits = 3
println("US-Format: " + nfu.format(d2))

println("Runden: " + round(d2 * 1e3) / 1e3)
}

Listing 2.10     Projekt »ZahlKomma«, Teil 4 von 4

Das Schlüsselwort import wird benötigt, um einem Programm zusätzliche Klassen oder Paketinhalte zur Verfügung zu stellen. Die Klasse NumberFormat aus dem Paket java.text bietet Möglichkeiten zur Formatierung von Zahlen.

Wird die statische Methode getInstance() der Klasse NumberFormat ohne Parameter aufgerufen, liefert sie ein Objekt der Klasse NumberFormat mit den im aktuellen System genutzten Formatangaben, hier also den deutschen Formatangaben. Diese beinhalten zum Beispiel ein Komma zur Abtrennung von Dezimalstellen einer Zahl.

Mithilfe der Eigenschaft maximumFractionDigits können Sie für ein solches NumberFormat-Objekt die maximale Anzahl an Nachkommastellen festlegen, auf die mithilfe dieser Formatangabe gerundet werden kann.

Die Methode format() liefert für ein NumberFormat-Objekt eine Zeichenkette. Diese beinhaltet den Wert, der als Parameter übergeben wird, im zuvor festgelegten Format.

Hinweis

Die Eigenschaft maximumFractionDigits dient in Kotlin zur Vereinfachung der Nutzung der beiden Methoden setMaximumFractionDigits() zum Festlegen der genannten Anzahl und getMaximumFractionDigits() zum Ermitteln der genannten Anzahl. Solche Eigenschaften stehen in Kotlin für viele Methoden zur Verfügung.

Statische Methoden werden nicht für ein bestimmtes Objekt einer Klasse ausgeführt, sondern für die gesamte Klasse. Mehr zur objektorientierten Programmierung sehen Sie in Kapitel 8.

Ein Objekt der Klasse Locale aus dem Paket java.util repräsentiert eine bestimmte Region inklusive der in dieser Region genutzten Formatangaben. Die gewünschte Region wird mithilfe einer Konstanten dieser Klasse festgelegt. Die Konstante US steht für die USA als Region.

Wird die Methode getInstance() mit einem Locale-Objekt als Parameter aufgerufen, liefert sie ein NumberFormat-Objekt mit den zugehörigen Formatangaben. Diese beinhalten zum Beispiel einen Punkt zur Abtrennung von Dezimalstellen einer Zahl.

Mit import kotlin.math.* werden alle Eigenschaften und Methoden des Pakets kotlin.math zur Verfügung gestellt. Die Methode round() dient zum Auf- und Abrunden einer Zahl mit Nachkommastellen auf eine ganze Zahl. In diesem Fall soll auf eine bestimmte Anzahl x an Nachkommastellen gerundet werden. Zu diesem Zweck wird die Zahl zunächst mit 10x multipliziert, anschließend gerundet, danach wieder durch 10x dividiert.

Die Ausgabe dieses letzten Programmteils:

DE-Format: 0,143
US-Format: 0.143
Runden: 0.143

2.4.5    Hilfestellung von IntelliJ IDEA


An dieser Stelle erfolgt ein wichtiger thematischer Einschub. In Projekten müssen häufig zusätzliche Elemente importiert werden. Der Editor von IntelliJ IDEA (und später auch von Android Studio) hilft Ihnen dabei. Das wird am Beispiel des Programmteils aus Abschnitt 2.4.4 gezeigt.

Nehmen wir an, Sie haben noch keine import-Anweisung erstellt und notieren die nachfolgende Anweisung:

val nfg = NumberFormat.getInstance()

Der...


Theis, Thomas
Thomas Theis ist Dipl.-Ing. für Technische Informatik. Als Softwareentwickler verfügt er über langjährige Erfahrung, ebenso als IT-Dozent unter anderem an der Fachhochschule Aachen. Er ist Autor vieler erfolgreicher Fachbücher, zum Beispiel zu den Themen Python, C#, PHP, JavaScript, C++ und Unity.



Ihre Fragen, Wünsche oder Anmerkungen
Vorname*
Nachname*
Ihre E-Mail-Adresse*
Kundennr.
Ihre Nachricht*
Lediglich mit * gekennzeichnete Felder sind Pflichtfelder.
Wenn Sie die im Kontaktformular eingegebenen Daten durch Klick auf den nachfolgenden Button übersenden, erklären Sie sich damit einverstanden, dass wir Ihr Angaben für die Beantwortung Ihrer Anfrage verwenden. Selbstverständlich werden Ihre Daten vertraulich behandelt und nicht an Dritte weitergegeben. Sie können der Verwendung Ihrer Daten jederzeit widersprechen. Das Datenhandling bei Sack Fachmedien erklären wir Ihnen in unserer Datenschutzerklärung.