Case Classes and Pattern Matching
Case Class Basics
Define a case class and read its fields.
case-class-basics
A case class is a small immutable record. The compiler adds a readable `toString`, field accessors, and value-based equality without extra code.
Case Class Basics
CaseClassBasics.scala
Replay: real traced execution (multi-file project)
case class Person(name: String, age: Int)
object Main {
def main(args: Array[String]): Unit = {
val age = 30
val person = Person("Ann", age)
println("name=" + person.name)
println("age=" + person.age)
println("person=" + person.toString)
}
}
case class Person(name: String, age: Int)
object Main {
def main(args: Array[String]): Unit = {
val age = 21
val person = Person("Ann", age)
println("name=" + person.name)
println("age=" + person.age)
println("person=" + person.toString)
}
}
case class Person(name: String, age: Int)
object Main {
def main(args: Array[String]): Unit = {
val age = 45
val person = Person("Ann", age)
println("name=" + person.name)
println("age=" + person.age)
println("person=" + person.toString)
}
}
age ← 30, person ← Person(Ann,30)
3object Main {4 def main(args: Array[String]): Unit = {5 val age→ 30 = 30 //@age=21, 456 val person→ Person(Ann,30) = Person("Ann", age30)78 println("name=" + person.nameAnn)9 println("age=" + person.age30)10 println("person=" + person.toStringPerson(Ann,30))11 }12}outputname=Ann age=30 person=Person(Ann,30)
age ← 21, person ← Person(Ann,21)
3object Main {4 def main(args: Array[String]): Unit = {5 val age→ 21 = 216 val person→ Person(Ann,21) = Person("Ann", age21)78 println("name=" + person.nameAnn)9 println("age=" + person.age21)10 println("person=" + person.toStringPerson(Ann,21))11 }12}outputname=Ann age=21 person=Person(Ann,21)
age ← 45, person ← Person(Ann,45)
3object Main {4 def main(args: Array[String]): Unit = {5 val age→ 45 = 456 val person→ Person(Ann,45) = Person("Ann", age45)78 println("name=" + person.nameAnn)9 println("age=" + person.age45)10 println("person=" + person.toStringPerson(Ann,45))11 }12}outputname=Ann age=45 person=Person(Ann,45)
Follow the Record
agestarts at30.Person("Ann", age)builds a person withname="Ann"andage=30.person.namereads the name field.person.agereads the age field.person.toStringprints the whole case class asPerson(Ann,30). | age value | name field | age field | whole person | | ---: | --- | ---: | --- | | 21 | Ann | 21 | Person(Ann,21) | | 30 | Ann | 30 | Person(Ann,30) | | 45 | Ann | 45 | Person(Ann,45) |
Exercise: CaseClassBasics.scala
Reproduce name=Ann, age=30, and person=Person(Ann,30), then use ages 21 and 45 to predict the changed age and person lines.