Kotlin Academy · Lektion

Primärkonstruktor och egenskapsparametrar

Deklarera klasser med primärkonstruktorer och egenskaper direkt i deklarationen.

Lektion 1 av 413 steg

Primärkonstruktor och egenskapsparametrar är en gratis lektion i Kotlin Academy på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Kotlin Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Kotlin Academy innehåller totalt 4 lektioner.

Den primära konstruktorn

En Kotlin-klass deklarerar sin primära konstruktor direkt efter klassnamnet inom parenteser. Ingen metodkropp – bara en parameterlista.

Enklaste klassen

Den primära konstruktorn utan modifierare är osynlig efter klassnamnet.

class Greeter(val name: String) {
    fun greet() = "Hello, $name!"
}
fun main() {
    println(Greeter("Ada").greet())
}

Egenskapsparametrar

Sätt val eller var före en konstruktorparameter för att skapa en klassegenskap i ett enda steg.

class Person(val name: String, var age: Int)
fun main() {
    val p = Person("Bob", 30)
    println("${p.name} is ${p.age}")
    p.age = 31
    println("Now ${p.age}")
}

Parametrar utan val/var

Konstruktorparametrar utan val/var är lokala för konstruktorn. De kan användas i init-block eller egenskapsinitierare, men inte nås senare.

class Logger(prefix: String) {
    val msg = "$prefix: ready"
}
fun main() {
    val l = Logger("[INFO]")
    println(l.msg)
    // l.prefix // ERROR — not a property
}

Standardvärden för parametrar

Ange standardvärden för konstruktorparametrar för att undvika överflödig kod för överlagringar.

class User(
    val name: String,
    val age: Int = 0,
    val email: String = ""
)
fun main() {
    println(User("Ana").age)               // 0
    println(User("Ben", 25).email)         // ""
    println(User("Cal", 30, "c@x.io").email)
}

Namngivna argument

Hoppa över den positionella ordningen och namnge parametrarna vid anropet – särskilt användbart tillsammans med standardvärden.

class HttpClient(
    val baseUrl: String,
    val timeoutMs: Int = 5000,
    val retries: Int = 3
)
fun main() {
    val c = HttpClient(
        baseUrl = "https://api.example.com",
        retries = 5
    )
    println("retries=${c.retries} timeout=${c.timeoutMs}")
}

Synlighet för konstruktor

Använd private constructor för att förhindra att klassen instansieras externt – vanligt i kombination med factory-metoder.

class Singleton private constructor() {
    companion object {
        val instance = Singleton()
    }
}
fun main() {
    val s = Singleton.instance
    println(s)
}

Sekundära konstruktorer

Lägg till ytterligare konstruktorer med nyckelordet constructor. De måste delegera till den primära konstruktorn med this(...).

class Point(val x: Int, val y: Int) {
    constructor(value: Int) : this(value, value)
}
fun main() {
    println("${Point(3).x}, ${Point(3).y}") // 3, 3
}

Konstruktor med synlighet

Du kan blanda olika synlighetsnivåer för konstruktorer – användbart i bibliotek.

class Lib internal constructor(val key: String) {
    companion object {
        fun create(key: String) = Lib(key)
    }
}
fun main() {
    println(Lib.create("abc").key)
}

Sammanfattning av init-block

Kod som ska köras under konstruktionen placeras i ett init { }-block. Flera init-block körs i källkodens ordning.

class Validator(val value: String) {
    init { require(value.isNotBlank()) { "value cannot be blank" } }
}
fun main() {
    println(Validator("ok").value)
    // Validator("") // throws IllegalArgumentException
}

Kombinera egenskaper och logik

Egenskapsdeklarationer, sekundära konstruktorer och init-block kan kombineras till en flexibel initieringspipeline.

class Account(
    val owner: String,
    initialBalance: Double = 0.0
) {
    var balance: Double = initialBalance
        private set
    init {
        require(initialBalance >= 0) { "balance must be non-negative" }
    }
    fun deposit(amount: Double) { balance += amount }
}
fun main() {
    val a = Account("Alice", 100.0)
    a.deposit(50.0)
    println("${a.owner}: ${a.balance}") // Alice: 150.0
}

Snabbkontroll

Vad gör nyckelordet val när det används i en parameter i den primära konstruktorn?

Sammanfattning

Den primära konstruktorn finns i klasshuvudet. Använd val/var för egenskapsparametrar; nakna parametrar är lokala för konstruktorn. Lägg till standardvärden för att minska antalet överlagringar och kör initieringslogik i init-block. Sekundära konstruktorer delegerar via this(...).

Gratis att börja

Lär dig Kotlin med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
51
Lektioner
203

Vanliga frågor

Är lektionen ”Primärkonstruktor och egenskapsparametrar” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Kotlin Academy, inklusive ”Primärkonstruktor och egenskapsparametrar”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Kotlin Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Primärkonstruktor och egenskapsparametrar”?

Deklarera klasser med primärkonstruktorer och egenskaper direkt i deklarationen. Ni övar på Kotlin Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Kotlin Academy?

Du behöver inga förkunskaper. Utbildningen i Kotlin Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Primärkonstruktor och egenskapsparametrar”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Kotlin Academy-lektionen?

Ja. Varje Kotlin Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Primärkonstruktor och egenskapsparametrar
  2. init-block och initieringsordning
  3. Egna getters och setters med field
  4. lateinit och fördröjd initiering
← Tillbaka till Kotlin Academy