Build transformed text from a small list.

transform-loop A loop can make each transformed value visible in replay. This is useful while learning the shape of a collection operation.

Transform with a Loop

factor
TransformLoop.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val factor = 2
    val values = List(1, 2, 3)
    var text = ""

    for (value <- values) {
      val scaled = value * factor
      if (text == "") {
        text = scaled.toString
      } else {
        text = text + "," + scaled.toString
      }
    }

    println("factor=" + factor)
    println("text=" + text)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val factor = 3
    val values = List(1, 2, 3)
    var text = ""

    for (value <- values) {
      val scaled = value * factor
      if (text == "") {
        text = scaled.toString
      } else {
        text = text + "," + scaled.toString
      }
    }

    println("factor=" + factor)
    println("text=" + text)
  }
}
  1. factor ← 2, values ← List(1, 2, 3), text ← (empty)

    1object Main {2  def main(args: Array[String]): Unit = {3    val factor→ 2 = 2 //@factor=34    val values→ List(1, 2, 3) = List(1, 2, 3)5    var text→ (empty) = ""67    for (value <- values) {
  2. scaled ← 2

    pass 1 of 3
    7for (value1 <- valuesList(1, 2, 3)) {8  val scaled→ 2 = value1 * factor29  if (text == "") {10    text = scaled.toString
    All 3 passes — pass 1 is the card above
    passvaluescaled.toStringscaledtext
    1122(empty) 2
    22442 2,4
    33662,4 2,4,6
  3. text ← 2

    8val scaled = value * factor9if (text(empty) == "") {10  text→ 2 = scaled.toString211} else {12  text = text + "," + scaled.toString
  4. text ← 2,4

    pass 1 of 2
    10    text = scaled.toString11  } else {12    text→ 2,4 = text + "," + scaled.toString413  }14}
  5. text ← 2,4,6

    pass 2 of 2
    10    text = scaled.toString11  } else {12    text→ 2,4,6 = text + "," + scaled.toString613  }14}
  6. println("factor=" + factor)

    16    println("factor=" + factor2)17    println("text=" + text2,4,6)18  }19}
    outputfactor=2
    text=2,4,6
  1. factor ← 3, values ← List(1, 2, 3), text ← (empty)

    1object Main {2  def main(args: Array[String]): Unit = {3    val factor→ 3 = 34    val values→ List(1, 2, 3) = List(1, 2, 3)5    var text→ (empty) = ""67    for (value <- values) {
  2. scaled ← 3

    pass 1 of 3
    7for (value1 <- valuesList(1, 2, 3)) {8  val scaled→ 3 = value1 * factor39  if (text == "") {10    text = scaled.toString
    All 3 passes — pass 1 is the card above
    passvaluescaled.toStringscaledtext
    1133(empty) 3
    22663 3,6
    33993,6 3,6,9
  3. text ← 3

    8val scaled = value * factor9if (text(empty) == "") {10  text→ 3 = scaled.toString311} else {12  text = text + "," + scaled.toString
  4. text ← 3,6

    pass 1 of 2
    10    text = scaled.toString11  } else {12    text→ 3,6 = text + "," + scaled.toString613  }14}
  5. text ← 3,6,9

    pass 2 of 2
    10    text = scaled.toString11  } else {12    text→ 3,6,9 = text + "," + scaled.toString913  }14}
  6. println("factor=" + factor)

    16    println("factor=" + factor3)17    println("text=" + text3,6,9)18  }19}
    outputfactor=3
    text=3,6,9

Scale Each Value

  1. values starts as List(1, 2, 3).
  2. factor is 2.
  3. Each loop pass multiplies one value.
  4. The text grows into 2,4,6. | Value | Scaled value | Text after step | | --- | --- | --- | | 1 | 2 | 2 | | 2 | 4 | 2,4 | | 3 | 6 | 2,4,6 |

Exercise: TransformLoop.scala

Loop through values, multiply each by a factor, and build comma-separated text