Tour of Scala

Case klase

Language

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("[email protected]", "[email protected]", "Ça va ?")

println(message1.sender)  // prints [email protected]
message1.sender = "[email protected]"  // 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("[email protected]", "[email protected]", "Com va?")
val message3 = Message("[email protected]", "[email protected]", "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("[email protected]", "[email protected]", "Me zo o komz gant ma amezeg")
val message5 = message4.copy(sender = message4.recipient, recipient = "[email protected]")
message5.sender  // [email protected]
message5.recipient // [email protected]
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: