Kotlin Academy · Les

De juiste scopefunctie kiezen: beslisgids

Selecteer de juiste scopefunctie op basis van receiver, retourtype en bedoeling.

Les 4 van 414 stappen

De juiste scopefunctie kiezen: beslisgids is een gratis Kotlin Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Kotlin Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Kotlin Academy bevat in totaal 4 lessen.

Vijf functies, twee assen

De bereikfuncties van Kotlin verschillen langs twee assen: stijl van de ontvanger (this of it) en geretourneerde waarde (ontvanger of resultaat van de lambda). Kies op basis van je bedoeling.

De keuzematrix

apply: this / ontvanger. also: it / ontvanger. run: this / lambda. let: it / lambda. with: this / lambda (geen ontvanger via een punt).

apply: configureren en retourneren

Gebruik apply voor objectconfiguratie in een keten in builderstijl.

class Config {
    var host: String = ""
    var port: Int = 0
}
fun main() {
    val cfg = Config().apply {
        host = "localhost"
        port = 8080
    }
    println("${cfg.host}:${cfg.port}")
}

also: neveneffecten

Gebruik also om te logboekregistreren, te valideren of een neveneffect te starten terwijl je de ontvanger doorgeeft.

fun main() {
    val items = listOf(1, 2, 3, 4)
        .also { println("got ${it.size} items") }
        .filter { it % 2 == 0 }
    println(items)
}

let: transformeren en nullveilig bereik

Gebruik let voor nullveilige transformaties of om het bereik van een variabele te beperken.

fun main() {
    val name: String? = "Ada"
    val length = name?.let { it.length } ?: 0
    println(length)
}

run: toegang tot meerdere leden met resultaat

Gebruik run wanneer je een resultaat berekent op basis van meerdere leden van de ontvanger — zo bespaar je de voorvoegsels it..

class User(val name: String, val age: Int)
fun main() {
    val description = User("Ada", 35).run {
        "Name: $name, Age: $age"
    }
    println(description)
}

with: bewerkingen op een bestaand object groeperen

Gebruik with(obj) { ... } wanneer je de aanroepplek niet beheert (geen keten met een punt), maar bewerkingen met this wilt groeperen.

class Builder {
    val parts = mutableListOf<String>()
    fun add(s: String) { parts.add(s) }
    fun build(): String = parts.joinToString("-")
}
fun main() {
    val b = Builder()
    val result = with(b) {
        add("hello")
        add("kotlin")
        build()
    }
    println(result) // hello-kotlin
}

Kiezen op basis van je bedoeling

Vraag jezelf af: (1) Heb ik de ontvanger zelf nodig of een afgeleid resultaat? (2) Geef ik de voorkeur aan this of it? Met de antwoorden kies je de functie.

class Box { var w = 0; var h = 0; fun area() = w * h }
fun main() {
    // Configure and return Box -> apply
    val box = Box().apply { w = 3; h = 4 }
    // Compute area from box -> let or run
    val area = box.let { it.area() }
    // Side effect, keep box -> also
    val sameBox = box.also { println("area=${it.area()}") }
    println("$box / $area / $sameBox")
}

Vergelijking: apply versus also

Beide retourneren de ontvanger. apply gebruikt this (goed voor het instellen van velden). also gebruikt it (goed om expliciet naar de ontvanger te verwijzen, vaak in neveneffecten).

class Item { var name = "" }
fun main() {
    val a = Item().apply { name = "apply" } // implicit this
    val b = Item().also { it.name = "also" } // explicit it
    println("${a.name} / ${b.name}")
}

Vergelijking: let versus run

Beide retourneren het resultaat van de lambda. let gebruikt it (goed voor eenvoudige transformaties en nullveiligheid). run gebruikt this (goed wanneer je veel leden aanroept).

class Calculator(val a: Int, val b: Int) {
    fun sum() = a + b
    fun product() = a * b
}
fun main() {
    val calc = Calculator(3, 4)
    val s = calc.let { it.sum() }                  // simple
    val combo = calc.run { "sum=${sum()} product=${product()}" } // multi-member
    println("$s / $combo")
}

Praktische verwerkingsketen

Een keten uit de praktijk gebruikt vaak meerdere bereikfuncties samen.

class Request(var url: String = "", var headers: Map<String, String> = emptyMap())
fun main() {
    val response = Request()
        .apply {
            url = "https://api.example.com"
            headers = mapOf("Accept" to "json")
        }
        .also { println("request: ${it.url}") }
        .let { req -> "GET ${req.url}" }
    println(response)
}

Keuzeoverzicht

Een snelle referentie voor het kiezen van het juiste hulpmiddel.

// apply: this, returns receiver — configure object
// also: it, returns receiver — side effects in chain
// let: it, returns lambda result — transform / null-safety
// run: this, returns lambda result — multi-member compute
// with: this, returns lambda result — group operations on existing obj
fun main() { println("Scope functions: pick by receiver style + return value") }

Korte controle

Welke bereikfunctie gebruikt this als ontvanger EN retourneert de ontvanger zelf?

Samenvatting

Kies de bereikfunctie op basis van je bedoeling: apply (configuratie + zelf retourneren), also (neveneffect + zelf retourneren), let (transformeren met it), run (transformeren met this), with (bewerkingen op een bestaand object groeperen). Twee assen — stijl van de ontvanger en geretourneerde waarde — bepalen de juiste keuze.

Gratis beginnen

Leer Kotlin met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
51
Lessen
203

Veelgestelde vragen

Is de les “De juiste scopefunctie kiezen: beslisgids” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Kotlin Academy, waaronder “De juiste scopefunctie kiezen: beslisgids”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Kotlin Academy bevat in totaal 4 lessen.

Wat leer ik in “De juiste scopefunctie kiezen: beslisgids”?

Selecteer de juiste scopefunctie op basis van receiver, retourtype en bedoeling. Je oefent met Kotlin Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Kotlin Academy te beginnen?

Ervaring vooraf is niet nodig. Kotlin Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “De juiste scopefunctie kiezen: beslisgids”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Kotlin Academy?

Ja. Elke les over Kotlin Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. apply en with: configureren en retourneren
  2. let en run: transformeren en scopen
  3. also: side-effects zonder de receiver te wijzigen
  4. De juiste scopefunctie kiezen: beslisgids
← Terug naar Kotlin Academy