Sobes.tech
Junior

Welke scope-functies in Kotlin ken je?

sobes.tech AI

Antwoord van AI

  • let: Voert een codeblok uit op een object en geeft het resultaat van de laatste uitdrukking terug. Wordt vaak gebruikt voor veilige methodenaanroepen op nullable objecten.
  • run: Heeft twee varianten:
    • Als extensiefunctie: Voert een codeblok uit op het object (this) en geeft het resultaat van de laatste uitdrukking terug.
    • Als zelfstandige functie: Voert een codeblok uit zonder receiver en geeft het resultaat van de laatste uitdrukking terug.
  • with: Voert een codeblok uit op een gegeven receiver-object en geeft het resultaat van de laatste uitdrukking terug.
  • apply: Voert een codeblok uit op een object (this) en geeft het object zelf terug. Wordt vaak gebruikt voor het configureren van eigenschappen.
  • also: Voert een codeblok uit op een object (it) en geeft het object zelf terug. Wordt gebruikt voor bijwerkingen op het object.
// Voorbeeld van gebruik van let
val name: String? = "Kotlin"
val length = name?.let {
    // this == null
    // it == "Kotlin"
    it.length // Geeft de lengte van de string
} // length == 6

// Voorbeeld van gebruik van run als extensiefunctie
val numbers = mutableListOf(1, 2, 3)
val firstAndLast = numbers.run {
    listOf(first(), last())
    // this == numbers
} // firstAndLast == [1, 3]

// Voorbeeld van gebruik van run als zelfstandige functie
val result = run {
    // Zonder receiver
    println("Een blok wordt uitgevoerd")
    1 + 2 // Geeft 3
} // result == 3

// Voorbeeld van gebruik van with
val configuration = configureUsing {
    // this - object dat wordt doorgegeven aan configureUsing
    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
}

// Voorbeeld van gebruik van apply
val person = mutableListOf<String>().apply {
    // this == lijst
    add("Alice")
    add("Bob")
} // person == ["Alice", "Bob"]

// Voorbeeld van gebruik van also
val list = mutableListOf(1, 2, 3)
val doubledList = list.also {
    // it == lijst
    println("Verwerking lijst: $it")
}.map { it * 2 } // doubledList == [2, 4, 6]