Erhalten Sie Zugang zu diesem und mehr als 300000 Büchern ab EUR 5,99 monatlich.
- Systematische Einführung in Kotlin mit Konzentration auf die Unterschiede zu Java - Verweise auf Internet-Dokumentationen, Werkzeuge und weiterführende Informationen - Im Anhang: Kurzübersicht zum schnellen Einstieg in die grundlegenden Kotlin-Konzepte - Mit Zusatzmaterial: Beispielprogramme aus dem Buch und Lösungen der Aufgaben - Ihr exklusiver Vorteil: E-Book inklusive beim Kauf des gedruckten Buches Ausgangspunkt ist die Programmiersprache Java, die in vielen Einführungskursen gelehrt wird und die traditionelle Sprache zur Entwicklung von Android-Apps ist. Auf dieser Basis führt das Buch in den Java-Nachfolger Kotlin ein. Kotlin behebt zahlreiche Defizite von Java und wird daher mittlerweile bei der Android-Programmierung bevorzugt sowie in weiteren Bereichen eingesetzt. Das Buch zeigt zunächst die Vorteile von Kotlin gegenüber Java auf und illustriert typische Sprachkonzepte anhand kurzer Beispiele. Anschließend werden die relevanten Aspekte und Techniken im Detail diskutiert und anhand von Code-Beispielen illustriert, ohne jedoch aus Java Bekanntes zu wiederholen. Es werden Anregungen für die eigenständige Hands-On-Arbeit sowie Hinweise auf weiterführende Informationen im Internet gegeben. Leserinnen und Lesern mit Java-Erfahrung bietet dieses Buch, insbesondere auch durch seinen Anhang Kotlin kurzgefasst, somit einen raschen praktischen Einstieg in die Kotlin-Programmierung. AUS DEM INHALT // - Einführung - Datenorganisation - Kontrollstrukturen - Nullsicherheit - Funktionen und Lambdas - Collections - Klassen Grundlagen - Klassen Erweiterungen - Nebenläufi gkeit - Weiterführende Themen - Anhang: Kotlin kurzgefasst - Systematische Einführung in Kotlin mit Konzentration auf die Unterschiede zu Java - Verweise auf Internet-Dokumentationen, Werkzeuge und weiterführende Informationen - Im Anhang: Kurzübersicht zum schnellen Einstieg in die grundlegenden Kotlin-Konzepte - Mit Zusatzmaterial: Beispielprogramme aus dem Buch und Lösungen der Aufgaben
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 323
Veröffentlichungsjahr: 2026
Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:
Begründet von
Prof. Dr. Michael Lutz und Prof. Dr. Christian Märtin
weitergeführt von
Prof. Dr. Christian Märtin
Hochschule Augsburg, Fachbereich Informatik
Die Werke dieser Reihe bieten einen gezielten Einstieg in grundlegende oder besonders gefragte Themenbereiche der Informatik und benachbarter Disziplinen. Alle Autoren verfügen über langjährige Erfahrung in Lehre und Forschung zu den jeweils behandelten Themengebieten und gewährleisten Praxisnähe und Aktualität.
Die Bände der Reihe können vorlesungsbegleitend oder zum Selbststudium eingesetzt werden. Sie lassen sich teilweise modular kombinieren. Wegen ihrer Kompaktheit sind sie gut geeignet, bestehende Lehrveranstaltungen zu ergänzen und zu aktualisieren.
Die meisten Werke stellen Ergänzungsmaterialien wie Lernprogramme, Software-Werkzeuge, Online-Kapitel, Beispielaufgaben mit Lösungen und weitere aktuelle Inhalte auf eigenen Websites zur Verfügung.
Peter Forbrig, Objektorientierte Softwareentwicklung mit UML
Arne Mayer, Die Kunst der IT-Produktentwicklung [in Planung]
Rainer Oechsle, Parallele und verteilte Anwendungen in Java
Claudia Reuter, Requirements Engineering – klassisch, agil und hybrid [in Planung]
Wolfgang Riggert / Ralf Lübben, Rechnernetze
Carsten Vogt, Von Java zu C
Carsten Vogt, Von Java zu Kotlin
Carsten Vogt
Von Java zu Kotlin
Effizient eine neue Sprache lernen
Ihr Plus – digitale Zusatzinhalte!
Auf plus.hanser-fachbuch.de gibt es kostenloses Zusatzmaterial zu diesem Buch.
Den Zugangscode finden Sie am Ende des Werkes.
Der Autor:
Prof. Dr. Carsten Vogt, Bergisch Gladbach
Print-ISBN: 978-3-446-48372-9 E-Book-ISBN: 978-3-446-48483-2 E-Pub-ISBN: 978-3-446-48590-7
Die allgemein verwendeten Personenbezeichnungen gelten gleichermaßen für alle Geschlechter.
Alle in diesem Werk enthaltenen Informationen, Verfahren und Darstellungen wurden zum Zeitpunkt der Veröffentlichung nach bestem Wissen zusammengestellt. Dennoch sind Fehler nicht ganz auszuschließen. Aus diesem Grund sind die im vorliegenden Werk enthaltenen Informationen für Autor:innen, Herausgeber:innen und Verlag mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autor:innen, Herausgeber:innen und Verlag übernehmen infolgedessen keine Verantwortung und werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Weise aus der Benutzung dieser Informationen – oder Teilen davon – entsteht. Ebenso wenig übernehmen Autor:innen, Herausgeber:innen und Verlag die Gewähr dafür, dass die beschriebenen Verfahren usw. frei von Schutzrechten Dritter sind. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt also auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benützt werden dürften.
Die endgültige Entscheidung über die Eignung der Informationen für die vorgesehene Verwendung in einer bestimmten Anwendung liegt in der alleinigen Verantwortung des Nutzers.
Bibliografische Information der Deutschen Nationalbibliothek: Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet unter http://dnb.d-nb.de abrufbar.
Dieses Werk ist urheberrechtlich geschützt. Alle Rechte, auch die der Übersetzung, des Nachdruckes und der Vervielfältigung des Werkes, oder Teilen daraus, vorbehalten. Kein Teil des Werkes darf ohne schriftliche Einwilligung des Verlages in irgendeiner Form (Fotokopie, Mikrofilm oder einem anderen Verfahren), auch nicht für Zwecke der Unterrichtgestaltung – mit Ausnahme der in den §§ 53, 54 UrhG genannten Sonderfälle –, reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden. Wir behalten uns auch eine Nutzung des Werks für Zwecke des Text und Data Mining nach § 44b UrhG ausdrücklich vor.
© 2025 Carl Hanser Verlag GmbH & Co. KG, München Vilshofener Straße 10 | 81679 München | [email protected]: Brigitte Bauer-Schiewek, Kristin Rothe Copy editing: Petra Kienle, Fürstenfeldbruck Herstellung: Grazyna Lada Coverkonzept: Marc Müller-Bremer, www.rebranding.de, München Covergestaltung: Thomas West Satz: Eberl & Koesel Studio, Kempten Druck: Elanders Waiblingen GmbH, Waiblingen
Vorwort
1 Einführung
1.1 Von Java zu Kotlin
1.2 Javas Schwächen und Kotlins Stärken
1.3 Erste Codebeispiele
1.3.1 Beispiel 1: Ein einfaches Hauptprogramm
1.3.2 Beispiel 2: Funktionen
1.3.3 Beispiel 3: Klassen und Objekte
1.4 Das Buch und sein Umfeld
1.4.1 Aufbau und Ausrichtung des Buchs
1.4.2 Quellen und Werkzeuge
2 Datenorganisation
2.1 Variablen und Konstanten
2.1.1 Deklaration und Initialisierung
2.1.2 Zuweisungen
2.1.3 Ein-/Ausgabe
2.2 Das Typkonzept
2.2.1 Grundlagen
2.2.2 Veränderliche und unveränderliche Objekte
2.2.3 Klassen- und Interface-Hierarchie
2.2.4 Typprüfung und -umwandlung
2.2.5 Typ-Alias
2.3 Zahlen und Wahrheitswerte
2.3.1 Zahlentypen und -literale
2.3.2 Operatoren für Zahlentypen
2.3.3 Bestimmung und Umwandlung von Zahlentypen
2.3.4 Wahrheitswerte
2.4 Zeichen und Zeichenketten
2.4.1 Der Typ Char
2.4.2 Der Typ String
2.5 Wertebereiche
2.5.1 Ranges
2.5.2 Progressions
2.6 Zeiten
2.7 Arrays
2.7.1 Arten von Arrays
2.7.2 Erzeugung und Initialisierung
2.7.3 Operationen auf Arrays
2.7.4 Mehrdimensionale Arrays
2.8 Ausblick: Vor- und selbstdefinierte Klassen
3 Kontrollstrukturen
3.1 Bedingte Anweisungen
3.1.1 Alternativen
3.1.2 Mehrfachverzweigungen
3.2 Schleifen
3.2.1 for
3.2.2 while und do-while
3.2.3 repeat
3.3 Ausnahmebehandlung
4 Nullsicherheit
4.1 Nullfähige und nicht-nullfähige Typen
4.2 Umgang mit nullfähigen Typen
4.3 Nullelemente in Datenstrukturen
5 Funktionen
5.1 Grundlegende Techniken
5.1.1 Programmstruktur
5.1.2 Definition und Aufruf
5.1.3 Parameter: Benennung und Defaultwerte
5.2 Spezielle Arten von Funktionen
5.2.1 Generische Funktionen
5.2.2 Geschachtelte Funktionen
5.2.3 Inline-Funktionen
5.2.4 Endrekursive Funktionen
5.3 Funktionale Programmierung
5.3.1 Grundlegende Erfordernisse
5.3.2 Funktionstypen und -variablen
5.3.3 Beispiel: Menu mit Funktionsaufrufen
5.4 Lambdas
5.4.1 Grundkonzept
5.4.2 Formen der Definition und Anwendung
5.5 Funktionen höherer Ordnung
5.5.1 Grundkonzept
5.5.2 Lambda-Parameter
5.6 Ausblick: Funktionen in Klassen und Objekten
6 Collections
6.1 Arten von Collections
6.1.1 Veränderliche und unveränderliche Collections
6.1.2 Die Interface-Hierarchie
6.2 Das Interface Collection
6.2.1 Lambda-Parameter
6.2.2 Grundlegende Properties und Funktionen
6.2.3 Prüffunktionen
6.2.4 Lese- und Schreibfunktionen
6.2.5 Such- und Filterfunktionen
6.2.6 Transformationsfunktionen
6.2.7 Aggregierungsfunktionen
6.3 Das Interface List
6.3.1 Erzeugung
6.3.2 Lesen, Schreiben, Iteration, Vergleich
6.3.3 Teil-Lists
6.4 Das Interface Set
6.5 Das Interface Map
6.6 Sequences
6.6.1 Erzeugung
6.6.2 Operationen
7 Klassen – Grundlagen
7.1 Basistechniken
7.1.1 Klassen und Objekte: Definition und Benutzung
7.1.2 Sichtbarkeiten
7.1.3 Die Klasse Any
7.2 Datenhaltung
7.2.1 Properties
7.2.2 Konstruktoren
7.3 Das Schlüsselwort object
7.3.1 Singletons
7.3.2 Companion Objects
7.3.3 Object Expressions
7.4 Datenzentrierte Klassen
7.4.1 Datenklassen
7.4.2 Enumerationsklassen
7.5 Generische Klassen
7.5.1 Typparameter und Typargumente
7.5.2 Zuweisungskompatibilität und Invarianz
7.5.3 T-Produzenten und T-Konsumenten
7.5.4 Kovarianz und Kontravarianz
7.5.5 Type Projection
7.5.6 Type Erasure und Reified Types
8 Klassen – Erweiterungen
8.1 Vererbung
8.1.1 Basisklassen und abgeleitete Klassen
8.1.2 Konstruktoren
8.1.3 Typprüfungen und -umwandlungen
8.1.4 Sealed Classes
8.2 Interfaces und abstrakte Klassen
8.2.1 Interfaces
8.2.2 Abstrakte Klassen
8.2.3 Functional Interfaces
8.3 Extensions
8.3.1 Grundkonzept
8.3.2 Definition und Benutzung
8.3.3 Implementation und Konsequenzen daraus
8.4 Funktionen mit Receivern
8.4.1 Grundkonzept
8.4.2 Funktionstypen und Lambdas mit Receivern
8.4.3 Scope Functions
8.5 Delegation
8.5.1 Vererbung versus Delegation
8.5.2 Delegation von Funktionen
8.5.3 Delegation von Properties
8.6 Operatoren
8.6.1 Überladen von Operatoren
8.6.2 Infix-Funktionen
8.7 Geschachtelte Klassen und Interfaces
9 Nebenläufigkeit
9.1 Grundlagen
9.1.1 Techniken der Nebenläufigkeit
9.1.2 Threads
9.1.3 Coroutinen mit Suspending Functions
9.2 Coroutinen: Erzeugung und Organisation
9.2.1 Coroutine Builder
9.2.2 Structured Concurrency
9.2.3 Dispatcher
9.2.4 Wechselseitiger Ausschluss und Reihenfolge
9.2.5 Abbruch
9.3 Flows
9.3.1 Cold Flows
9.3.2 Hot Flows
9.3.3 Operationen auf Flows
10 Weitere Themen
10.1 Reflection
10.1.1 Grundlagen
10.1.2 Klassen
10.1.3 Objekte und Ausdrücke
10.1.4 Properties und Funktionen
10.2 Type-Safe Builder
10.2.1 Problem und Lösungsansatz
10.2.2 Vorgehensweise
10.2.3 Rekursive Strukturen
10.2.4 Anwendungsgebiete
10.3 Reguläre Ausdrücke
10.3.1 Erzeugung
10.3.2 Anwendung
10.4 Kotlin Multiplatform
Quellen und Dokumentationen
Lösungen der Hands-On-Aufgaben
Kapitel 2 Datenorganisation
Kapitel 3 Kontrollstrukturen
Kapitel 4 Nullsicherheit
Kapitel 5 Funktionen
Kapitel 6 Collections
Kapitel 7 Klassen – Grundlagen
Kapitel 8 Klassen – Erweiterungen
Kapitel 9 Nebenläufigkeit
Kapitel 10 Weitere Themen
Kotlin kurzgefasst
Von Java zu Kotlin
Datenorganisation
Kontrollstrukturen
Nullsicherheit
Funktionen
Collections
Klassen – Grundlagen
Klassen – Erweiterungen
Nebenläufigkeit
Weitere Themen
Der Mensch ist ein Gewohnheitstier: Wenn man sich erst einmal an etwas gewöhnt hat, dann bleibt man gern dabei und sieht über Unzulänglichkeiten hinweg. Manchmal ist das auch gut so, denn Veränderungen machen Arbeit und Neues ist nicht unbedingt besser. Oft ist aber der Aufwand für einen Wechsel geringer, als es zunächst scheint, und er lohnt den Gewinn, den man damit macht. Im Idealfall kann man sogar Neues und Altes gemeinsam einsetzen, sodass der Übergang weich ist und man bewährte Dinge beibehalten kann.
Ein gutes Beispiel hierfür ist das Programmiersprachen-Duo Java und Kotlin. Java als altbewährte Sprache bietet viele Möglichkeiten und wird in vielen Bereichen verwendet. Wer aber intensiver mit Java programmiert, dem/der wird einiges auffallen, das verbessert werden könnte – so zum Beispiel die Robustheit gegen Null Pointer Exceptions, eine Unterstützung von „Stand-Alone-Funktionen“ (also Methoden, die unabhängig von Klassen definiert und verwendet werden), weniger Zwang zum Einsatz von try-catch-Konstrukten, eine kompaktere Definition von Klassen und einiges mehr.
Kotlin wurde in diesem Sinne als Nachfolgesprache von Java entwickelt. Es hat einerseits viele bewährte Dinge von Java übernommen und andererseits Problemstellen beseitigt sowie zahlreiche neue Programmkonstrukte hinzugefügt. Sehr vorteilhaft ist, dass man Kotlin und Java gemeinsam einsetzen, also im selben Programm einen Teil des Codes in Java und einen anderen in Kotlin schreiben sowie auf Bibliotheken beider Sprachen zurückgreifen kann. Java und Kotlin sind somit „interoperabel“. Daher lohnt sich ein Übergang von Java zu Kotlin nicht nur, sondern er kann zudem weich vonstattengehen.
Aktuell wird Kotlin, neben Backend-Anwendungen, insbesondere für die Programmierung von Mobilgeräte-Apps eingesetzt. So empfiehlt Google für seine Android-Plattform nunmehr Kotlin anstelle von Java. Gerade auf diesem Feld kann Kotlin seine Stärken ausspielen: Die Programmierarbeit wird leichter und man kann vorhandenen Java-Code in neuen Kotlin-basierten Projekten weiterverwenden und bei Bedarf schrittweise anpassen.
Das Buch wendet sich daher an Lernende und Profis, die bereits Erfahrung mit Java haben und Kotlin als weitere Programmiersprache lernen wollen oder müssen. Es ist keine grundständige Darstellung von Kotlin, sondern konzentriert sich auf die Besonderheiten der Sprache gegenüber Java. Damit bietet es eine zwar vergleichsweise kurze, aber doch recht detaillierte und tiefgängige Einführung in Kotlin.
Künstliche Intelligenz ist beim Schreiben dieses Buchs nur begrenzt eingesetzt worden. Die Beispielprogramme und natürlich auch die Texte selbst wurden per Kopf und Hand erstellt. KI wurde, neben Literatur und Web-Quellen, zur Recherche genutzt und zum nachträglichen Gegenlesen einiger Textstellen. Das war in vielen Fällen hilfreich, brachte aber manchmal auch irreführende oder sogar schlichtweg falsche Resultate. Es zeigte sich wieder, dass man sich auf KI nicht unbesehen verlassen sollte, und mein Dank an sie (wenn man sie denn personifizieren möchte) ist daher nur ein eingeschränkter.
Mein uneingeschränkter Dank geht aber an
alle Beteiligten beim Hanser-Verlag, insbesondere Frau Bauer-Schiewek und Frau Rothe, für die wieder problemlose und angenehme Zusammenarbeit,
meine Frau Sabine dafür, dass ich auch abends auf dem Sofa neben ihr auf meinem Notebook herumtippen durfte, und
ganz besonders Herrn Dipl.-Ing. Marcel Henk für viele anregende Gespräche zu Kotlin und Android sowie für alles andere in einem langen gemeinsamen Berufsleben.
Kommentare zum Buch und (hoffentlich wenige) Fehlermeldungen erbitte ich per Mail an [email protected].
Bergisch Gladbach, im Sommer 2025 Carsten Vogt
Für eine schnelle Übersicht können Sie zunächst den Abschnitt Kotlin kurzgefasst im Anhang lesen, bevor Sie mit der eigentlichen Lektüre beginnen.
Zu diesem Buch stehen Ihnen weitere Inhalte digital zur Verfügung:
die Beispielprogramme
der Lösungscode der Aufgaben
die nach Drucklegung entdeckten Fehler
Links auf Online-Quellen
Die Zugangsinformationen finden Sie im Kasten zum Zusatzmaterial auf Seite I im Buch.
Hinweise auf Dokumentationen und Werkzeuge, die im Internet frei verfügbar sind, gibt der Literaturteil im Anhang.
