Kotlin Academy · leksjon

Lokale klasser

Klasser i funksjoner

Leksjon 4 av 413 trinn

Lokale klasser 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.

Klasser i funksjoner

Kotlin lar Dem deklarere en lokal klasse inne i kroppen til en funksjon. Den er bare synlig i denne funksjonen.

fun main() {
    class Greeting(val text: String) {
        fun show() = println(text)
    }
    Greeting("Hello local").show()
}

Begrenset til funksjonen

En lokal klasse kan ikke brukes utenfor funksjonen der den er deklarert, slik at hjelpe-typer holdes tett avgrenset.

fun build(): String {
    class Builder {
        fun make() = "built"
    }
    return Builder().make()
}

fun main() {
    println(build())
}

Fange opp lokale variabler

I likhet med closures kan lokale klasser fange opp variabler fra den omsluttende funksjonen.

fun main() {
    val prefix = ">> "
    class Logger {
        fun log(msg: String) = println(prefix + msg)
    }
    Logger().log("started")
}

Flere instanser

De kan opprette så mange instanser av en lokal klasse som De ønsker, innenfor funksjonen.

fun main() {
    class Point(val x: Int)
    val a = Point(1)
    val b = Point(2)
    println(a.x + b.x)
}

Lokal klasse med metoder

Lokale klasser er fullverdige klasser: konstruktører, egenskaper og metoder fungerer på samme måte.

fun main() {
    class Account(var balance: Int) {
        fun deposit(n: Int) { balance += n }
    }
    val acc = Account(100)
    acc.deposit(50)
    println(acc.balance)
}

Hvorfor bruke en lokal klasse?

Bruk en lokal klasse når en hjelp type bare gir mening inne i én enkelt funksjon, slik at De unngår å fylle filen med typer på toppnivå.

fun parseLine(line: String): Int {
    class Token(val value: String)
    val tokens = line.split(",").map { Token(it) }
    return tokens.size
}

fun main() {
    println(parseLine("a,b,c"))
}

Fange opp muterbar tilstand

En lokal klasse kan endre variabler med muterbar verdi som er fanget opp fra det omsluttende området.

fun main() {
    var total = 0
    class Adder {
        fun add(n: Int) { total += n }
    }
    val a = Adder()
    a.add(5)
    a.add(7)
    println(total)
}

Implementere grensesnitt lokalt

Lokale klasser kan implementere grensesnitt, noe som er nyttig når De trenger en navngitt og gjenbrukbar implementasjon inne i én funksjon.

interface Step { fun run(): String }

fun main() {
    class First : Step {
        override fun run() = "first"
    }
    println(First().run())
}

Lokal kontra anonym

Velg en lokal klasse når De trenger et navn, for eksempel for å opprette flere instanser eller referere til typen. Velg et anonymt objekt for én enkelt instans på stedet.

fun main() {
    class Repeater(val times: Int) {
        fun run() = "x".repeat(times)
    }
    println(Repeater(3).run())
}

Nesting inne i løkker

En lokal klasse kan til og med deklareres inne i blokker som løkker, og får da omfang begrenset til blokken.

fun main() {
    for (i in 1..2) {
        class Tag(val id: Int)
        println(Tag(i).id)
    }
}

En praktisk hjelpetype

Lokale klasser egner seg godt for kortlivede domenehjelpere som brukes av nøyaktig én funksjon.

fun report(values: List<Int>): String {
    class Stats(val sum: Int, val max: Int)
    val s = Stats(values.sum(), values.max())
    return "sum=${s.sum} max=${s.max}"
}

fun main() {
    println(report(listOf(3, 7, 2)))
}

Rask kontroll

Test forståelsen Deres av lokale klasser.

Oppsummering

De har lært om lokale klasser:

  • Deklareres inne i en funksjon og har omfang begrenset til den.
  • Kan fange opp og endre lokale variabler fra det omsluttende området.
  • Er fullverdige klasser med konstruktører, egenskaper, metoder og grensesnitt.
  • Bruk en lokal klasse når De trenger et navn, og et anonymt objekt for én enkelt instans på stedet.
fun main() {
    val tag = "L"
    class C { fun show() = tag }
    println(C().show())
}
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 «Lokale klasser» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Kotlin Academy, inkludert «Lokale klasser», 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 «Lokale klasser»?

Klasser i funksjoner 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 «Lokale klasser»?

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. Nestede klasser
  2. Indre klasser
  3. Anonyme objekter
  4. Lokale klasser
← Tilbake til Kotlin Academy