Kotlin Academy · Lektion

let, also und run mit Nullable-Receivern

Verwenden Sie Scope-Funktionen, um Code nur auszuführen, wenn ein Wert nicht null ist.

Lektion 3 von 413 Schritte

let, also und run mit Nullable-Receivern ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Kotlin Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Scope-Funktionen treffen auf Nullable-Typen

Die Scope-Funktionen let, also und run lassen sich hervorragend mit dem Safe Call ?. kombinieren, um einen Block nur auszuführen, wenn der Empfänger nicht null ist.

let mit Safe Call

obj?.let { ... } führt den Block nur aus, wenn obj nicht null ist; innerhalb des Blocks verweist it auf den nicht-nullbaren Wert.

fun main() {
    val name: String? = "Kotlin"
    name?.let {
        println("Length: ${it.length}")
        println("Upper: ${it.uppercase()}")
    }
}

let überspringt den Block bei null

Wenn der Empfänger null ist, wird der gesamte let-Block übersprungen.

fun main() {
    val name: String? = null
    val result = name?.let {
        println("never printed")
        it.length
    }
    println(result) // null
}

let gibt einen Wert zurück

let gibt den letzten Ausdruck seines Blocks zurück und kann für Standardwerte mit Elvis verkettet werden.

fun main() {
    val raw: String? = "  hello "
    val cleaned = raw?.let { it.trim().uppercase() } ?: "(empty)"
    println(cleaned) // HELLO
}

also für Seiteneffekte

also führt einen Block für seine Seiteneffekte aus und gibt den ursprünglichen Empfänger zurück – ideal zum Protokollieren innerhalb einer Kette.

fun main() {
    val name: String? = "Alice"
    val len = name?.also { println("Processing: $it") }?.length
    println("len = $len")
}

also bewahrt den Wert

Im Gegensatz zu let gibt also den Empfänger unverändert zurück. Verwenden Sie es, wenn Sie einen Wert inspizieren möchten, ohne ihn zu transformieren.

fun main() {
    val items: List<Int>? = listOf(1, 2, 3)
    items?.also { println("Got list of size ${it.size}") }
           ?.forEach { println(it) }
}

run mit Safe Call

obj?.run { ... } führt den Block aus, wobei this an den Empfänger gebunden ist. Verwenden Sie es, wenn Sie auf Member zugreifen möchten, ohne das Präfix it. zu benötigen.

fun main() {
    val name: String? = "Kotlin"
    val info = name?.run {
        "len=$length upper=${uppercase()}"
    }
    println(info)
}

let und run im Vergleich

let verwendet it (Lambda-Argument); run verwendet this (Empfänger). Wählen Sie die Variante, die sich besser liest.

class User(val name: String, val age: Int)
fun main() {
    val user: User? = User("Ada", 35)
    user?.let { "${it.name} age ${it.age}" }.also(::println)
    user?.run { "$name age $age" }.also(::println)
}

Mehrere Scope-Funktionen verketten

Verketten Sie Scope-Funktionen über eine Pipeline hinweg, um schrittweise zu transformieren und zu protokollieren.

fun main() {
    val raw: String? = "  hello  "
    val result = raw
        ?.also { println("raw: '$it'") }
        ?.let { it.trim() }
        ?.also { println("trimmed: '$it'") }
        ?.uppercase()
    println(result) // HELLO
}

let mit takeIf

Kombinieren Sie takeIf (Filter) mit let, um eine prädikatbasierte Ausführung zu ermöglichen.

fun main() {
    val name: String? = "Kotlin"
    name?.takeIf { it.length > 3 }
        ?.let { println("Long name: $it") }
}

Anti-Pattern: Verschachtelte if-Anweisungen

Vor den Scope-Funktionen:

fun main() {
    val name: String? = "Alice"
    // OLD WAY:
    if (name != null) {
        val upper = name.uppercase()
        println(upper)
    }
    // NEW WAY:
    name?.let { println(it.uppercase()) }
}

Schnelltest

Welche Scope-Funktion gibt den Empfänger unverändert zurück und wird hauptsächlich für Seiteneffekte verwendet?

Zusammenfassung

Kombinieren Sie ?. mit let (der Block gibt einen Wert zurück und verwendet it), run (der Block gibt einen Wert zurück und verwendet this) oder also (gibt den Empfänger zurück und dient Seiteneffekten). Alle überspringen die Ausführung, wenn der Empfänger null ist.

Kostenlos starten

Lerne Kotlin mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
51
Lektionen
203

Häufig gestellte Fragen

Ist die Lektion „let, also und run mit Nullable-Receivern“ kostenlos?

Ja — der vollständige Text von „let, also und run mit Nullable-Receivern“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Kotlin Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „let, also und run mit Nullable-Receivern“?

Verwenden Sie Scope-Funktionen, um Code nur auszuführen, wenn ein Wert nicht null ist. Du übst Kotlin Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Kotlin Academy zu starten?

Keine Vorkenntnisse erforderlich. Kotlin Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „let, also und run mit Nullable-Receivern“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Kotlin Academy-Lektion Code schreiben und ausführen?

Ja. Jede Kotlin Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Nullable-Typen und der ?-Modifier
  2. Safe Call ?. und Elvis ?: im praktischen Code
  3. let, also und run mit Nullable-Receivern
  4. !!-Operator: Wann und warum Sie ihn vermeiden sollten
← Zurück zu Kotlin Academy