Sobes.tech
Junior

Welche Gültigkeitsbereichsfunktionen in Kotlin kennen Sie?

sobes.tech KI

Antwort von AI

  • let: Führt einen Codeblock auf einem Objekt aus und gibt das Ergebnis des letzten Ausdrucks zurück. Wird häufig für sichere Methodenaufrufe an nullable Objekten verwendet.
  • run: Hat zwei Varianten:
    • Als Erweiterungsfunktion: Führt einen Codeblock auf dem Objekt (this) aus und gibt das Ergebnis des letzten Ausdrucks zurück.
    • Als eigenständige Funktion: Führt einen Codeblock ohne Empfänger aus und gibt das Ergebnis des letzten Ausdrucks zurück.
  • with: Führt einen Codeblock auf einem übergebenen Empfängerobjekt aus und gibt das Ergebnis des letzten Ausdrucks zurück.
  • apply: Führt einen Codeblock auf einem Objekt (this) aus und gibt das Objekt selbst zurück. Wird häufig zur Konfiguration von Eigenschaften verwendet.
  • also: Führt einen Codeblock auf einem Objekt (it) aus und gibt das Objekt selbst zurück. Wird für Nebenwirkungen auf dem Objekt verwendet.
// Beispiel für die Verwendung von let
val name: String? = "Kotlin"
val length = name?.let {
    // this == null
    // it == "Kotlin"
    it.length // Gibt die Länge des Strings zurück
} // length == 6

// Beispiel für die Verwendung von run als Erweiterung
val numbers = mutableListOf(1, 2, 3)
val firstAndLast = numbers.run {
    listOf(first(), last())
    // this == numbers
} // firstAndLast == [1, 3]

// Beispiel für die Verwendung von run als eigenständige Funktion
val result = run {
    // Ohne Empfänger
    println("Ausführen eines Blocks")
    1 + 2 // Gibt 3 zurück
} // result == 3

// Beispiel für die Verwendung von with
val configuration = configureUsing {
    // this - das an configureUsing übergebene Objekt
    width = 100
    height = 200
}

fun configureUsing(builder: ScopeExample.() -> Unit): ScopeExample {
    val example = ScopeExample()
    example.builder()
    return example
}

class ScopeExample {
    var width: Int = 0
    var height: Int = 0
}

// Beispiel für die Verwendung von apply
val person = mutableListOf<String>().apply {
    // this == Liste
    add("Alice")
    add("Bob")
} // person == ["Alice", "Bob"]

// Beispiel für die Verwendung von also
val list = mutableListOf(1, 2, 3)
val doubledList = list.also {
    // it == Liste
    println("Verarbeite Liste: $it")
}.map { it * 2 } // doubledList == [2, 4, 6]