Kotlin Academy · leksjon

Velge riktig scope-funksjon: Beslutningsguide

Velg riktig scope-funksjon basert på mottaker, returtype og hensikt.

Leksjon 4 av 414 trinn

Velge riktig scope-funksjon: Beslutningsguide er en gratis leksjon i Kotlin Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Kotlin Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Kotlin Academy inneholder totalt 4 leksjoner.

Fem funksjoner, to akser

Kotlins scope-funksjoner varierer langs to akser: receiver-stil (this eller it) og returnert verdi (receiveren eller resultatet fra lambdaen). Velg ut fra hensikten.

Beslutningsmatrisen

apply: this / receiver. also: it / receiver. run: this / lambda. let: it / lambda. with: this / lambda (ingen receiver via punktum).

apply: Konfigurer og returner

Bruk apply til konfigurering av objekter i en builder-stil-kjede.

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: Sideeffekter

Bruk also til å logge, validere eller utløse en sideeffekt mens receiveren sendes videre.

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

let: Transformer og håndter null-sikkerhet

Bruk let til null-sikre transformasjoner eller for å begrense en variabels scope.

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

run: Tilgang til flere medlemmer med resultat

Bruk run når De beregner et resultat fra flere medlemmer på receiveren – sparer prefikser med it..

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

with: Gruppere operasjoner på et eksisterende objekt

Bruk with(obj) { ... } når De ikke kontrollerer kallestedet (ingen punktumkjede), men vil gruppere operasjoner ved hjelp av this.

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
}

Velge ut fra hensikten

Spør: (1) Trenger jeg receiveren tilbake eller et avledet resultat? (2) Foretrekker jeg this eller it? Svarene avgjør hvilken funksjon som skal brukes.

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")
}

Sammenligning: apply kontra also

Begge returnerer receiveren. apply bruker this (godt egnet for å sette felt). also bruker it (godt egnet for å referere eksplisitt til receiveren, ofte i sideeffekter).

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}")
}

Sammenligning: let kontra run

Begge returnerer resultatet fra lambdaen. let bruker it (godt egnet for enkle transformasjoner og null-sikkerhet). run bruker this (godt egnet når De kaller mange medlemmer).

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")
}

Praktisk pipeline

En kjede fra virkeligheten bruker ofte flere scope-funksjoner sammen.

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)
}

Huskeliste

En rask referanse for å velge riktig verktøy.

// 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") }

Kort kontroll

Hvilken scope-funksjon bruker this som receiver OG returnerer selve receiveren?

Oppsummering

Velg scope-funksjon etter hensikt: apply (konfigurering + returner seg selv), also (sideeffekt + returner seg selv), let (transformer med it), run (transformer med this), with (grupper operasjoner på et eksisterende objekt). To akser – receiver-stil og returnert verdi – avgjør riktig valg.

Gratis å komme i gang

Lær deg Kotlin med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
51
Leksjoner
203

Ofte stilte spørsmål

Er leksjonen «Velge riktig scope-funksjon: Beslutningsguide» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Kotlin Academy, inkludert «Velge riktig scope-funksjon: Beslutningsguide», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Kotlin Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Velge riktig scope-funksjon: Beslutningsguide»?

Velg riktig scope-funksjon basert på mottaker, returtype og hensikt. Du øver på Kotlin Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Kotlin Academy?

Ingen tidligere erfaring er nødvendig. Kotlin Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Velge riktig scope-funksjon: Beslutningsguide»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Kotlin Academy-leksjonen?

Ja. Alle Kotlin Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. apply og with: Konfigurere og returnere
  2. let og run: Transformere og avgrense omfang
  3. also: Bivirkninger uten å endre mottakeren
  4. Velge riktig scope-funksjon: Beslutningsguide
← Tilbake til Kotlin Academy