Futures and Async Concepts
Then Transform
Transform a ready value in ordered steps.
then-transform
Future-style `map` or `then` logic takes a ready value and computes the next value. Sequential scalar assignments make the transformation visible.
Then Transform
ThenTransform.scala
Replay: real traced execution (multi-file project)
object Main {
def main(args: Array[String]): Unit = {
val fetched = 8
val plusOne = fetched + 1
val doubled = plusOne * 2
val label = "ready:" + doubled
println("fetched=" + fetched)
println("plusOne=" + plusOne)
println("doubled=" + doubled)
println("label=" + label)
}
}
object Main {
def main(args: Array[String]): Unit = {
val fetched = 3
val plusOne = fetched + 1
val doubled = plusOne * 2
val label = "ready:" + doubled
println("fetched=" + fetched)
println("plusOne=" + plusOne)
println("doubled=" + doubled)
println("label=" + label)
}
}
object Main {
def main(args: Array[String]): Unit = {
val fetched = 12
val plusOne = fetched + 1
val doubled = plusOne * 2
val label = "ready:" + doubled
println("fetched=" + fetched)
println("plusOne=" + plusOne)
println("doubled=" + doubled)
println("label=" + label)
}
}
fetched ← 8, plusOne ← 9, doubled ← 18, label ← ready:18
1object Main {2 def main(args: Array[String]): Unit = {3 val fetched→ 8 = 8 //@fetched=3, 124 val plusOne→ 9 = fetched8 + 15 val doubled→ 18 = plusOne9 * 26 val label→ ready:18 = "ready:" + doubled1878 println("fetched=" + fetched8)9 println("plusOne=" + plusOne9)10 println("doubled=" + doubled18)11 println("label=" + labelready:18)12 }13}outputfetched=8 plusOne=9 doubled=18 label=ready:18
fetched ← 3, plusOne ← 4, doubled ← 8, label ← ready:8
1object Main {2 def main(args: Array[String]): Unit = {3 val fetched→ 3 = 34 val plusOne→ 4 = fetched3 + 15 val doubled→ 8 = plusOne4 * 26 val label→ ready:8 = "ready:" + doubled878 println("fetched=" + fetched3)9 println("plusOne=" + plusOne4)10 println("doubled=" + doubled8)11 println("label=" + labelready:8)12 }13}outputfetched=3 plusOne=4 doubled=8 label=ready:8
fetched ← 12, plusOne ← 13, doubled ← 26, label ← ready:26
1object Main {2 def main(args: Array[String]): Unit = {3 val fetched→ 12 = 124 val plusOne→ 13 = fetched12 + 15 val doubled→ 26 = plusOne13 * 26 val label→ ready:26 = "ready:" + doubled2678 println("fetched=" + fetched12)9 println("plusOne=" + plusOne13)10 println("doubled=" + doubled26)11 println("label=" + labelready:26)12 }13}outputfetched=12 plusOne=13 doubled=26 label=ready:26