Case-klasser
Oföränderliga databärare.
Case-klasser är en gratis lektion i Scala för backendutveckling och funktionell programmering på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Scala för backendutveckling och funktionell programmering, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Scala för backendutveckling och funktionell programmering innehåller totalt 4 lektioner.
Vad är en case-klass?
En case-klass är en särskild typ av klass som är utformad för att innehålla oföränderlig data. Ni deklarerar den med case class.
Scala genererar automatiskt mycket användbar kod åt er, vilket gör case-klasser till det självklara sättet att modellera data.
Deklarera en case-klass
Ange bara fälten i parameterlistan. Varje parameter blir ett oföränderligt fält.
Nyckelordet new behövs inte för att skapa en instans.
case class Point(x: Int, y: Int)
object Main {
def main(args: Array[String]): Unit = {
val p = Point(3, 4)
println(p.x)
println(p.y)
}
}Automatisk toString
Case-klasser får en läsbar toString utan extra arbete, som visar klassnamnet och fältvärdena.
Det gör felsökning och loggning enkelt.
case class Point(x: Int, y: Int)
object Main {
def main(args: Array[String]): Unit = {
val p = Point(1, 2)
println(p)
}
}Värdejämlikhet
Case-klasser jämförs efter värde, inte referens. Två instanser med samma fält är lika.
Vanliga klasser jämförs i stället efter identitet.
case class Point(x: Int, y: Int)
object Main {
def main(args: Array[String]): Unit = {
val a = Point(1, 2)
val b = Point(1, 2)
println(a == b)
}
}Oföränderliga fält
Fält i case-klasser är val som standard och kan därför inte tilldelas på nytt.
Om ni vill ha en ändrad version skapar ni i stället en ny instans, utan att ändra den gamla.
case class Point(x: Int, y: Int)
object Main {
def main(args: Array[String]): Unit = {
val p = Point(1, 2)
println(p.x)
}
}Metoden copy
Varje case-klass har en metod som heter copy. Den skapar en ny instans och låter er ändra endast de fält ni anger.
Detta är det idiomatiska sättet att uppdatera oföränderlig data.
case class Point(x: Int, y: Int)
object Main {
def main(args: Array[String]): Unit = {
val p = Point(1, 2)
val moved = p.copy(y = 99)
println(p)
println(moved)
}
}Stöd för mönstermatchning
Case-klasser fungerar sömlöst med match. Ni kan dekonstruera dem genom att namnge deras fält i ett mönster.
Detta är en av de främsta anledningarna att använda dem.
case class Point(x: Int, y: Int)
object Main {
def describe(p: Point): String = p match {
case Point(0, 0) => "origin"
case Point(x, 0) => s"on x-axis at $x"
case Point(x, y) => s"point ($x, $y)"
}
def main(args: Array[String]): Unit = {
println(describe(Point(0, 0)))
println(describe(Point(5, 0)))
println(describe(Point(2, 3)))
}
}Standardvärden för parametrar
Precis som vanliga klasser kan case-klasser ha standardvärden för parametrar, så att ni kan utelämna dem när ni skapar en instans.
case class User(name: String, active: Boolean = true)
object Main {
def main(args: Array[String]): Unit = {
val u1 = User("Ada")
val u2 = User("Bo", false)
println(u1)
println(u2)
}
}Lägga till metoder
En case-klass kan ha egna metoder i kroppen, precis som vilken klass som helst. De arbetar med de oföränderliga fälten.
case class Rect(w: Int, h: Int) {
def area: Int = w * h
}
object Main {
def main(args: Array[String]): Unit = {
val r = Rect(3, 4)
println(r.area)
}
}Varför case-klasser?
Case-klasser ger er följande utan extra arbete:
- En kortfattad konstruktor med oföränderliga fält
- Läsbar
toString - Värdebaserade
equalsochhashCode - En metod som heter
copy - Förstklassig mönstermatchning
De utgör grunden för att modellera data i Scala.
Sätt ihop delarna
Här skapas, kopieras och jämförs en case-klass, och den mönstermatchas i ett och samma exempel.
case class Money(amount: Int, currency: String)
object Main {
def main(args: Array[String]): Unit = {
val price = Money(10, "USD")
val sale = price.copy(amount = 8)
println(price == sale)
sale match {
case Money(a, "USD") => println(s"$a dollars")
case Money(a, c) => println(s"$a $c")
}
}
}Snabbtest
Testa er förståelse av case-klasser.
Sammanfattning
Du har lärt dig att en case class modellerar oföränderlig data med genererade hjälpfunktioner:
- Skapa instanser utan
new; fälten är oföränderligaval - Automatisk
toStringsamt värdebaseradequals/hashCode copyskapar modifierade kopior- Inbyggt stöd för mönstermatchning
- Standardvärden och egna metoder är tillåtna
Lär dig Scala 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
- 39
- Lektioner
- 143
Vanliga frågor
Är lektionen ”Case-klasser” gratis?
Ja – hela texten till ”Case-klasser” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Scala för backendutveckling och funktionell programmering, kan Ni uppgradera till CoddyKit PRO. Kursen i Scala för backendutveckling och funktionell programmering innehåller totalt 4 lektioner.
Vad lär jag mig i ”Case-klasser”?
Oföränderliga databärare. Ni övar på Scala för backendutveckling och funktionell programmering 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 Scala för backendutveckling och funktionell programmering?
Du behöver inga förkunskaper. Utbildningen i Scala för backendutveckling och funktionell programmering 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 ”Case-klasser”?
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 Scala för backendutveckling och funktionell programmering-lektionen?
Ja. Varje Scala för backendutveckling och funktionell programmering-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.