Case klase su kao obične klase s par ključnih razlika. Dobre su za modelovanje nepromjenjivih podataka. U sljedećem koraku turneje, vidjećemo kako su korisne u podudaranju uzoraka (pattern matching).
Definisanje case klase
Minimalna case klasa se sastoji iz ključnih riječi case class
, identifikatora, i liste parametara (koja može biti prazna):
case class Book(isbn: String)
val frankenstein = Book("978-0486282114")
Primijetite kako se ključna riječ new
ne koristi za instanciranje Book
case klase. To je zato što case klase imaju podrazumijevanu apply
metodu koja se brine o instanciranju.
Kada kreirate case klasu s parametrima, parametri su public val
.
case class Message(sender: String, recipient: String, body: String)
val message1 = Message("guillaume@quebec.ca", "jorge@catalonia.es", "Ça va ?")
println(message1.sender) // prints guillaume@quebec.ca
message1.sender = "travis@washington.us" // this line does not compile
Ne možete izmijetniti message1.sender
zato što je val
(tj. nepromjenjiv). Moguće je koristiti i var
u case klasama ali nije preporučeno.
Poređenje
Case klase se porede po strukturi a ne po referenci:
case class Message(sender: String, recipient: String, body: String)
val message2 = Message("jorge@catalonia.es", "guillaume@quebec.ca", "Com va?")
val message3 = Message("jorge@catalonia.es", "guillaume@quebec.ca", "Com va?")
val messagesAreTheSame = message2 == message3 // true
Iako se message2
i message3
odnose na različite objekte, vrijednost oba objekta je ista.
Kopiranje
Možete kreirati (plitku) kopiju instance case klase koristeći copy
metodu. Opciono možete promijeniti argumente konstruktora.
case class Message(sender: String, recipient: String, body: String)
val message4 = Message("julien@bretagne.fr", "travis@washington.us", "Me zo o komz gant ma amezeg")
val message5 = message4.copy(sender = message4.recipient, recipient = "claire@bourgogne.fr")
message5.sender // travis@washington.us
message5.recipient // claire@bourgogne.fr
message5.body // "Me zo o komz gant ma amezeg"
recipient
od message4
se koristi kao sender
od message5
ali je body
od message4
kopiran direktno.
Contributors to this page:
Contents
- Uvod
- Osnove
- Sjedinjeni tipovi
- Klase
- Podrazumijevane vrijednosti parametara
- Imenovani parametri
- Trejtovi
- Tuples
- Kompozicija mixin klasa
- Funkcije višeg reda
- Ugniježdene metode
- Curry-jevanje
- Case klase
- Podudaranje uzoraka (pattern matching)
- Singlton objekti
- Regularni izrazi
- Ekstraktor objekti
- For komprehensije
- Generičke klase
- Varijanse
- Gornja granica tipa
- Donja granica tipa
- Unutarnje klase
- Apstraktni tipovi
- Složeni tipovi
- Self-tipovi
- Implicitni parametri
- Implicitne konverzije
- Polimorfne metode
- Lokalno zaključivanje tipova (type inference)
- Operatori
- By-name parametri
- Anotacije
- Packages and Imports
- Package Objects