Kotlin lernen
Dauer: 10 Minuten
- Kotlin kennenlernen
Ziel: Zugang zu Kotlin erleichtern
Google empfiehlt seit ein paar Jahren, dass neue Android-Projekte mit Kotlin anstatt Java umgesetzt werden sollten.
Anhand der MainActivity können wir zum Kotlin-Code
kurz den entsprechenden Java-Code andeuten (siehe unten).
Somit wird hoffentlich einigermaßen deutlich, wie Kolin-Code aus Java-Sicht zu verstehen ist. Außerdem sollte dadurch Kotlin attraktiver wirken.
// MainActivity in Kotlin, Dateiname: MainActivity.kt
// package hier weggelassen
import android.os.Bundle
import androidx.activity.ComponentActivity
// weitere imports weggelassen
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Code hier weggelassen
}
}// MainActivity in Java, Dateiname: MainActivity.java
// package hier weggelassen
import android.os.Bundle;
import androidx.activity.ComponentActivity;
public class MainActivity extends ComponentActivity {
@override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}Am Anfang wirkt Kotlin vielleicht etwas ungewöhnlich aber viele Java-Entwickler sind inzwischen auf Kotlin mit seinen modernen und eleganten Spracheigenschaften umgestiegen. Wer sich mit Java auskennt, wird erfahrungsgemäß in relativ kurzer Zeit mit Kotlin zurechtkommen.
Wir werden im Laufe der Vorführungen mehrere Kotlin-Beispiele sehen.
Ausgewählte Besonderheiten von Kotlin für Leute mit Erfahrung in Java (thanks ChatGPT!):
- Interop mit Java weitgehend nahtlos: Kotlin kann Java (und umgekehrt) nutzen, mit einigen Einschränkungen
- Semikolons optional,
newexistiert nicht - Null-Safety:
String?(nullable) vs.String(non-null); viele NullPointer-Probleme werden zur Compile-Time erkannt - Null-Safety: Safe-Call
?., Elvis-Operator?:, Not-Null-Assert!!(NPEs bleiben möglich, z. B. bei Java-Interop) val(nicht neu zuweisbar) vs.var(neu zuweisbar);valbedeutet nicht, dass das Objekt immutable ist- Properties erzeugen automatisch Getter/Setter; Custom-Getter/Setter direkt definierbar
- Primary Constructor:
class User(val name: String, var age: Int) - Top-Level-Funktionen (keine Utility-Klassen nötig)
- Extension Functions:
fun String.foo() = ...erweitert Typen ohne Vererbung - Default-Parameter & Named Arguments (
fun f(a: Int = 0); Named Arguments nicht bei Java-Methoden) - Single-Expression-Funktionen:
fun inc(x: Int) = x + 1 - String Templates:
"Hallo $name"oder"Ergebnis: ${x + 1}" - Lambdas mit Trailing-Lambda-Syntax:
list.filter { it > 0 } - Collections:
List(read-only) vs.MutableList, Operationen wiemap,filter,groupBy - Klassen sind
finalby default →openfür Vererbung data classähnlich Java Records, zusätzlichcopy()(shallow copy) und Destructuring übercomponentN()whenähnlich Javaswitch, aber auch mit beliebigen Bedingungen, Typprüfungen und Rangesifundtrysind Ausdrücke (können Werte liefern)objectfür Singletons,companion objectfür klassenbezogene Funktionen/Werte- Keine Checked Exceptions (kein verpflichtendes
throws/catch) - Scoping-Funktionen:
let,also,apply,run,with(unterscheiden: Rückgabewert & Receiver) - Koroutinen für suspendierbare Nebenläufigkeit:
suspend-Funktionen,Flowfür asynchrone Streams (kotlinx.coroutines); Alternative zu Java Virtual Threads, kein vollständiger Ersatz für Threads
Tipp: Mit KI-Tools wie ChatGPT oder Gemini (auch in Android Studio) kann Kotlin gelernt werden, insbesondere aus Sicht anderer Sprachen wie Java.
Vertiefendes Material
- Überblick zu Kotlin in Android: https://developer.android.com/kotlin
- Abschnitte zu Kotlin in Googles Einsteigerkurs: https://developer.android.com/courses/android-basics-compose/course
- Kotlin für Compose: https://developer.android.com/develop/ui/compose/kotlin
- Dokumentation und weitere Kurse zu Kotlin gibt es auf der offiziellen Webseite unter https://kotlinlang.org .