MWCodebymw.de ↗
Kotlin

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

  • applythis, gibt das Objekt zurück. „Objekt einrichten."
  • alsoit, gibt das Objekt zurück. „Nebenbei was tun" (z. B. loggen).
  • letit, gibt das Ergebnis zurück. „Umwandeln / Null-Check."
  • runthis, gibt das Ergebnis zurück. „Block berechnen."
  • with(x){} → wie run, 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ück

Nicht ü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

#Scope Functions#Kotlin#let#apply#lesbarer Code

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 →