0Pricing
Kotlin Academy · Lektion

apply und with: Konfigurieren und zurückgeben

Verwenden Sie apply und with, um Objekte zu konfigurieren, und verstehen Sie deren Rückgabewerte.

apply und with: Konfigurieren und zurückgeben ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 1 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.

Zusammenfassung der Scope-Funktionen

Kotlins Scope-Funktionen (apply, also, let, run, with) ermöglichen es Ihnen, einen Block im Kontext eines Objekts auszuführen. Sie unterscheiden sich jeweils durch den Receiver (this oder it) und den Rückgabewert.

Grundlagen von apply

apply { ... } führt den Block aus, wobei this an den Receiver gebunden ist, und gibt den Receiver selbst zurück. Ideal zum Konfigurieren von Objekten.

class Person {
    var name: String = ""
    var age: Int = 0
}
fun main() {
    val p = Person().apply {
        name = "Ada"
        age = 35
    }
    println("${p.name}, ${p.age}")
}

Warum apply nützlich ist

Ohne apply müssten Sie eine temporäre Variable verwenden, um ein Objekt zu konfigurieren und anschließend zurückzugeben. apply fasst dies zu einem einzigen Ausdruck zusammen.

class Config {
    var host: String = ""
    var port: Int = 0
}
fun makeConfig(): Config {
    // Without apply:
    // val c = Config(); c.host = "x"; c.port = 8080; return c
    return Config().apply {
        host = "localhost"
        port = 8080
    }
}
fun main() {
    val c = makeConfig()
    println("${c.host}:${c.port}")
}

apply in einer Kette

apply gibt den Receiver zurück und lässt sich daher natürlich mit weiteren Methodenaufrufen verketten.

class Builder {
    val parts = mutableListOf<String>()
}
fun main() {
    val result = Builder().apply {
        parts.add("hello")
        parts.add("world")
    }.parts.joinToString(" ")
    println(result) // hello world
}

Grundlagen von with

with(receiver) { ... } führt den Block mit this = Receiver aus und gibt das Ergebnis der Lambda-Funktion zurück (NICHT den Receiver). Nützlich, wenn Sie aus einem Receiver einen abgeleiteten Wert berechnen möchten.

class Rect(val w: Int, val h: Int)
fun main() {
    val area = with(Rect(3, 4)) {
        w * h
    }
    println(area) // 12
}

apply vs. with

apply gibt den Receiver zurück und eignet sich daher perfekt für Builder. with gibt das Ergebnis der Lambda-Funktion zurück und eignet sich daher perfekt für Berechnungen mit einem Receiver.

class Box(var width: Int = 0, var height: Int = 0)
fun main() {
    val box = Box().apply { width = 10; height = 20 } // returns Box
    val area = with(box) { width * height }            // returns Int
    println("$box area=$area")
}

apply mit Listen

Konfigurieren Sie eine veränderliche Collection direkt im Ausdruck.

fun main() {
    val list = mutableListOf<String>().apply {
        add("a")
        add("b")
        add("c")
    }
    println(list)
}

apply gibt denselben Typ zurück

Der Rückgabetyp von apply ist immer der Typ des Receivers. Eine explizite Rückgabe ist nicht erforderlich.

class Sb {
    private val buf = StringBuilder()
    fun append(s: String): Sb { buf.append(s); return this }
    fun build(): String = buf.toString()
}
fun main() {
    val s = Sb().apply {
        append("Hello, ")
        append("Kotlin!")
    }.build()
    println(s)
}

with: Mehrere Member wiederverwenden

Innerhalb von with befinden sich alle Member des Receivers im Gültigkeitsbereich – das Präfix obj. ist nicht erforderlich.

class Person(val name: String, val age: Int)
fun main() {
    val description = with(Person("Ada", 35)) {
        "Name: $name, Age: $age, AgeNext: ${age + 1}"
    }
    println(description)
}

Verschachteltes apply

Sie können apply für eine hierarchische Konfiguration in ein anderes apply verschachteln. Verwenden Sie dies sparsam.

class Address {
    var city: String = ""
    var zip: String = ""
}
class User {
    var name: String = ""
    var address: Address = Address()
}
fun main() {
    val u = User().apply {
        name = "Ada"
        address.apply {
            city = "Istanbul"
            zip = "34000"
        }
    }
    println("${u.name} in ${u.address.city}")
}

Wann Sie apply NICHT verwenden sollten

Wenn Sie den Receiver nicht zurückgeben müssen, bevorzugen Sie eine direkte Konstruktion mit benannten Argumenten oder let/run. Verwenden Sie apply nicht nur der Abwechslung halber.

class Config(val host: String, val port: Int)
fun main() {
    // Named arguments often beat builder + apply:
    val cfg = Config(host = "localhost", port = 8080)
    println("${cfg.host}:${cfg.port}")
}

Kurze Überprüfung

Was gibt apply nach der Ausführung seines Blocks zurück?

Zusammenfassung

apply führt einen Block mit this = Receiver aus und gibt den Receiver zurück – ideal für die Konfiguration von Objekten. with führt einen Block mit this = Receiver aus und gibt das Lambda-Ergebnis zurück – ideal für abgeleitete Werte. Verwenden Sie benannte Argumente, wenn die Konfiguration einfach ist.

Häufig gestellte Fragen

Ist die Lektion „apply und with: Konfigurieren und zurückgeben“ kostenlos?

Ja — der vollständige Text von „apply und with: Konfigurieren und zurückgeben“ 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 „apply und with: Konfigurieren und zurückgeben“?

Verwenden Sie apply und with, um Objekte zu konfigurieren, und verstehen Sie deren Rückgabewerte. 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 1 von 4.

Wie lange dauert die Lektion „apply und with: Konfigurieren und zurückgeben“?

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. apply und with: Konfigurieren und zurückgeben
  2. let und run: Umwandeln und scopen
  3. also: Nebeneffekte ohne Änderung des Receivers
  4. Die passende Scope-Funktion auswählen: Entscheidungshilfe
← Zurück zu Kotlin Academy