Functions and Methods
Helper Composition
Use two pure helpers in one expression.
helper-composition
Small pure helpers can be composed by passing one helper's result into the next.
Helper Composition
HelperComposition.scala
Replay: real traced execution (multi-file project)
object Main {
def double(value: Int): Int = {
value * 2
}
def addOne(value: Int): Int = {
value + 1
}
def main(args: Array[String]): Unit = {
val start = 3
val result = addOne(double(start))
println("start=" + start)
println("result=" + result)
}
}
object Main {
def double(value: Int): Int = {
value * 2
}
def addOne(value: Int): Int = {
value + 1
}
def main(args: Array[String]): Unit = {
val start = 4
val result = addOne(double(start))
println("start=" + start)
println("result=" + result)
}
}
object Main {
def double(value: Int): Int = {
value * 2
}
def addOne(value: Int): Int = {
value + 1
}
def main(args: Array[String]): Unit = {
val start = 6
val result = addOne(double(start))
println("start=" + start)
println("result=" + result)
}
}
start ← 3
10def main(args: Array[String]): Unit = {11 val start→ 3 = 3 //@start=4, 612 val result = addOne(double(start3))1314 println("start=" + start)def double(value: Int): Int =
1object Main {2 def double(value3: Int): Int = {3 value3 * 24 }def addOne(value: Int): Int =
6def addOne(value6: Int): Int = {7 value6 + 18}result ← 7
11 val start = 3 //@start=4, 612 val result→ 7 = addOne(double(start3))1314 println("start=" + start3)15 println("result=" + result7)16 }17}outputstart=3 result=7
start ← 4
10def main(args: Array[String]): Unit = {11 val start→ 4 = 412 val result = addOne(double(start4))1314 println("start=" + start)def double(value: Int): Int =
1object Main {2 def double(value4: Int): Int = {3 value4 * 24 }def addOne(value: Int): Int =
6def addOne(value8: Int): Int = {7 value8 + 18}result ← 9
11 val start = 412 val result→ 9 = addOne(double(start4))1314 println("start=" + start4)15 println("result=" + result9)16 }17}outputstart=4 result=9
start ← 6
10def main(args: Array[String]): Unit = {11 val start→ 6 = 612 val result = addOne(double(start6))1314 println("start=" + start)def double(value: Int): Int =
1object Main {2 def double(value6: Int): Int = {3 value6 * 24 }def addOne(value: Int): Int =
6def addOne(value12: Int): Int = {7 value12 + 18}result ← 13
11 val start = 612 val result→ 13 = addOne(double(start6))1314 println("start=" + start6)15 println("result=" + result13)16 }17}outputstart=6 result=13
Follow the Helpers
startstarts as3.double(start)runs first and returns6.addOne(6)runs next.addOnereturns7.- The caller stores that value in
result. | start | afterdouble| afteraddOne| | --- | --- | --- | | 3 | 6 | 7 | | 4 | 8 | 9 | | 6 | 12 | 13 |
Exercise: HelperComposition.scala
Reproduce start=3 and result=7, then use the pinned start variants 4 and 6 to predict result=9 and result=13.