Use a fixed value and a changing variable in one small calculation.

vals-vars A `val` is assigned once. A `var` can be reassigned when a step needs changing state.

Vals and Vars

base
ValsVars.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val base = 10
    var running = base
    running = running + 2
    val finalValue = running

    println("base=" + base)
    println("final=" + finalValue)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val base = 5
    var running = base
    running = running + 2
    val finalValue = running

    println("base=" + base)
    println("final=" + finalValue)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val base = 20
    var running = base
    running = running + 2
    val finalValue = running

    println("base=" + base)
    println("final=" + finalValue)
  }
}
  1. base ← 10, running ← 10, finalValue ← 12

    1object Main {2  def main(args: Array[String]): Unit = {3    val base→ 10 = 10 //@base=5, 204    var running→ 10 = base→ 105    running→ 12 = running + 26    val finalValue→ 12 = running→ 1278    println("base=" + base10)9    println("final=" + finalValue12)10  }11}
    outputbase=10
    final=12
  1. base ← 5, running ← 5, finalValue ← 7

    1object Main {2  def main(args: Array[String]): Unit = {3    val base→ 5 = 54    var running→ 5 = base→ 55    running→ 7 = running + 26    val finalValue→ 7 = running→ 778    println("base=" + base5)9    println("final=" + finalValue7)10  }11}
    outputbase=5
    final=7
  1. base ← 20, running ← 20, finalValue ← 22

    1object Main {2  def main(args: Array[String]): Unit = {3    val base→ 20 = 204    var running→ 20 = base→ 205    running→ 22 = running + 26    val finalValue→ 22 = running→ 2278    println("base=" + base20)9    println("final=" + finalValue22)10  }11}
    outputbase=20
    final=22

Follow the Values

  1. base starts at 10.
  2. running starts with the same value as base.
  3. The next step adds 2 to running.
  4. finalValue becomes 12.
  5. The program prints base=10 and final=12. | base | added | final | | --- | --- | --- | | 5 | 2 | 7 | | 10 | 2 | 12 | | 20 | 2 | 22 |

Exercise: ValsVars.scala

Reproduce final=12, then use base 5 and 20 to predict each final value.