Skip to Content

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.kt
// 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.java
// 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, new existiert 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); val bedeutet 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 wie map, filter, groupBy
  • Klassen sind final by default → open für Vererbung
  • data class ähnlich Java Records, zusätzlich copy() (shallow copy) und Destructuring über componentN()
  • when ähnlich Java switch, aber auch mit beliebigen Bedingungen, Typprüfungen und Ranges
  • if und try sind Ausdrücke (können Werte liefern)
  • object für Singletons, companion object fü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, Flow fü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