Immutable Data Patterns
Building a New List
Add an element by creating a new list.
build-list
Appending with `:+` returns a new list and leaves the original unchanged. The old list keeps its size, so earlier code still sees the same values.
Building a New List
BuildList.scala
Replay: real traced execution (multi-file project)
object Main {
def main(args: Array[String]): Unit = {
val extra = 4
val base = List(1, 2, 3)
val grown = base :+ extra
println("base=" + base.mkString(","))
println("grown=" + grown.mkString(","))
println("baseSize=" + base.length)
}
}
object Main {
def main(args: Array[String]): Unit = {
val extra = 5
val base = List(1, 2, 3)
val grown = base :+ extra
println("base=" + base.mkString(","))
println("grown=" + grown.mkString(","))
println("baseSize=" + base.length)
}
}
object Main {
def main(args: Array[String]): Unit = {
val extra = 9
val base = List(1, 2, 3)
val grown = base :+ extra
println("base=" + base.mkString(","))
println("grown=" + grown.mkString(","))
println("baseSize=" + base.length)
}
}
extra ← 4, base ← List(1, 2, 3), grown ← List(1, 2, 3, 4)
1object Main {2 def main(args: Array[String]): Unit = {3 val extra→ 4 = 4 //@extra=5, 94 val base→ List(1, 2, 3) = List(1, 2, 3)5 val grown→ List(1, 2, 3, 4) = baseList(1, 2, 3) :+ extra467 println("base=" + baseList(1, 2, 3).mkString(","))8 println("grown=" + grownList(1, 2, 3, 4).mkString(","))9 println("baseSize=" + base.length3)10 }11}outputbase=1,2,3 grown=1,2,3,4 baseSize=3
extra ← 5, base ← List(1, 2, 3), grown ← List(1, 2, 3, 5)
1object Main {2 def main(args: Array[String]): Unit = {3 val extra→ 5 = 54 val base→ List(1, 2, 3) = List(1, 2, 3)5 val grown→ List(1, 2, 3, 5) = baseList(1, 2, 3) :+ extra567 println("base=" + baseList(1, 2, 3).mkString(","))8 println("grown=" + grownList(1, 2, 3, 5).mkString(","))9 println("baseSize=" + base.length3)10 }11}outputbase=1,2,3 grown=1,2,3,5 baseSize=3
extra ← 9, base ← List(1, 2, 3), grown ← List(1, 2, 3, 9)
1object Main {2 def main(args: Array[String]): Unit = {3 val extra→ 9 = 94 val base→ List(1, 2, 3) = List(1, 2, 3)5 val grown→ List(1, 2, 3, 9) = baseList(1, 2, 3) :+ extra967 println("base=" + baseList(1, 2, 3).mkString(","))8 println("grown=" + grownList(1, 2, 3, 9).mkString(","))9 println("baseSize=" + base.length3)10 }11}outputbase=1,2,3 grown=1,2,3,9 baseSize=3