Classes and Objects
Immutable Records
Read fixed fields and calculate a derived value.
immutable-record
An immutable object keeps its fields fixed. Code can calculate derived values without changing the object.
Immutable Records
ImmutableRecord.scala
Replay: real traced execution (multi-file project)
class Point(val x: Int, val y: Int) {
def summary: String = {
x + "," + y
}
override def toString: String = "[point]"
}
object Main {
def main(args: Array[String]): Unit = {
val dx = 2
val point = new Point(3, 5)
val movedX = point.x + dx
val movedSummary = movedX + "," + point.y
println("original=" + point.summary)
println("moved=" + movedSummary)
}
}
class Point(val x: Int, val y: Int) {
def summary: String = {
x + "," + y
}
override def toString: String = "[point]"
}
object Main {
def main(args: Array[String]): Unit = {
val dx = 1
val point = new Point(3, 5)
val movedX = point.x + dx
val movedSummary = movedX + "," + point.y
println("original=" + point.summary)
println("moved=" + movedSummary)
}
}
class Point(val x: Int, val y: Int) {
def summary: String = {
x + "," + y
}
override def toString: String = "[point]"
}
object Main {
def main(args: Array[String]): Unit = {
val dx = 4
val point = new Point(3, 5)
val movedX = point.x + dx
val movedSummary = movedX + "," + point.y
println("original=" + point.summary)
println("moved=" + movedSummary)
}
}
dx ← 2, point ← [point], movedX ← 5, movedSummary ← 5,5
9object Main {10 def main(args: Array[String]): Unit = {11 val dx→ 2 = 2 //@dx=1, 412 val point→ [point] = new Point(3, 5)13 val movedX→ 5 = point[point].x + dx214 val movedSummary→ 5,5 = movedX5 + "," + point.y51516 println("original=" + point.summary)def summary: String =
pass 1 of 31class Point(val x: Int, val y: Int) {2 def summary: String = {3 x3 + "," + y54 }println("original=" + point.summary)
16 println("original=" + point.summary3,5)17 println("moved=" + movedSummary)18}println("original=" + point.summary)
16 println("original=" + point.summary3,5)17 println("moved=" + movedSummary5,5)18 }19}outputoriginal=3,5 moved=5,5
dx ← 1, point ← [point], movedX ← 4, movedSummary ← 4,5
9object Main {10 def main(args: Array[String]): Unit = {11 val dx→ 1 = 112 val point→ [point] = new Point(3, 5)13 val movedX→ 4 = point[point].x + dx114 val movedSummary→ 4,5 = movedX4 + "," + point.y51516 println("original=" + point.summary)def summary: String =
pass 1 of 31class Point(val x: Int, val y: Int) {2 def summary: String = {3 x3 + "," + y54 }println("original=" + point.summary)
16 println("original=" + point.summary3,5)17 println("moved=" + movedSummary)18}println("original=" + point.summary)
16 println("original=" + point.summary3,5)17 println("moved=" + movedSummary4,5)18 }19}outputoriginal=3,5 moved=4,5
dx ← 4, point ← [point], movedX ← 7, movedSummary ← 7,5
9object Main {10 def main(args: Array[String]): Unit = {11 val dx→ 4 = 412 val point→ [point] = new Point(3, 5)13 val movedX→ 7 = point[point].x + dx414 val movedSummary→ 7,5 = movedX7 + "," + point.y51516 println("original=" + point.summary)def summary: String =
pass 1 of 31class Point(val x: Int, val y: Int) {2 def summary: String = {3 x3 + "," + y54 }println("original=" + point.summary)
16 println("original=" + point.summary3,5)17 println("moved=" + movedSummary)18}println("original=" + point.summary)
16 println("original=" + point.summary3,5)17 println("moved=" + movedSummary7,5)18 }19}outputoriginal=3,5 moved=7,5