Scope-Funktionen in Kotlin – let, apply, run, also und with richtig einsetzen
let, apply, run, also, with – fünf kleine Helfer, die Kotlin-Code kürzer und lesbarer machen. Ich zeige dir mit einem einfachen Merksatz, welche du wann nimmst, ohne dass es kryptisch wird.
Die fünf Scope-Funktionen sehen am Anfang verwirrend ähnlich aus. In Wahrheit unterscheiden sie sich nur in zwei Fragen: Wie heißt das Objekt im Block (it oder this) und was kommt zurück (das Objekt selbst oder das Ergebnis).
Die zwei nützlichsten: apply und let
// apply: konfigurieren und DAS OBJEKT zurückgeben (this)
val paint = Paint().apply {
color = Color.BLUE
strokeWidth = 4f
isAntiAlias = true
}
// let: mit einem Nicht-Null-Wert arbeiten und das ERGEBNIS zurückgeben (it)
val length: Int? = name?.let { trimmed ->
println("Name: $trimmed")
trimmed.length
}apply ist perfekt zum Einrichten eines Objekts. let glänzt zusammen mit ?. – der Block läuft nur, wenn der Wert nicht null ist.
Der Merksatz
apply→ this, gibt das Objekt zurück. „Objekt einrichten."also→ it, gibt das Objekt zurück. „Nebenbei was tun" (z. B. loggen).let→ it, gibt das Ergebnis zurück. „Umwandeln / Null-Check."run→ this, gibt das Ergebnis zurück. „Block berechnen."with(x){}→ wierun, aber x als Parameter statt als Empfänger.
val user = User("Mia").also { log("angelegt: ${it.name}") } // gibt user zurück
val json = with(user) { """{"name":"$name"}""" } // gibt den String zurückNicht übertreiben
Scope-Funktionen sind Würze, kein Hauptgericht. Wenn du sie tief verschachtelst, wird der Code schwerer lesbar als mit einer normalen Variablen. Meine Faustregel: maximal eine Ebene, und wenn du überlegen musst, ob it oder this gemeint ist, schreib es lieber aus.
Solche Kotlin-Grundlagen nutze ich in jeder Android-App, die ich baue. Mehr Snippets findest du auf code.bymw.de.
Quellen
Du brauchst mehr als ein Snippet?
Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.
Projekt anfragen →Verwandte Snippets
Nach mehreren Kriterien sortieren – sortedWith, compareBy und thenBy
Erst nach Priorität, dann nach Datum, und die ohne Termin ganz nach hinten: Solche Sortierungen werden mit einem handgeschriebenen Comparator schnell unleserlich. Kotlin hat dafür eine Baukastenschreibweise.
Room-Migrationen – das Schema ändern, ohne Nutzerdaten zu verlieren
Eine neue Spalte in der Entity, und beim nächsten Start ist der Spielstand weg – weil fallbackToDestructiveMigration die Datenbank einfach löscht. So machst du es richtig, inklusive Test.
Fehler in Coroutinen – coroutineScope, supervisorScope und wer wen mitreißt
Eine von fünf parallelen Abfragen scheitert – und plötzlich sind alle abgebrochen. Das ist kein Bug, sondern strukturierte Nebenläufigkeit. Wer den Unterschied zwischen coroutineScope und supervisorScope kennt, steuert das bewusst.