Theis | Einstieg in Kotlin | E-Book | 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 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.



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.