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

age
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)
  }
}
  1. 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)
  1. 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)
  1. 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

  1. age starts at 30.
  2. Person("Ann", age) builds a person with name="Ann" and age=30.
  3. person.name reads the name field.
  4. person.age reads the age field.
  5. person.toString prints the whole case class as Person(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.