Functions name reusable work and return values to the caller.

function call A function call runs the named function and can use the returned value in another expression.

Functions

side
Functions.scala
Replay: real traced execution (multi-file project)
object Main {
  def square(value: Int): Int = {
    value * value
  }

  def main(args: Array[String]): Unit = {
    val side = 5
    val area = square(side)

    println("side=" + side)
    println("area=" + area)
  }
}
object Main {
  def square(value: Int): Int = {
    value * value
  }

  def main(args: Array[String]): Unit = {
    val side = 3
    val area = square(side)

    println("side=" + side)
    println("area=" + area)
  }
}
object Main {
  def square(value: Int): Int = {
    value * value
  }

  def main(args: Array[String]): Unit = {
    val side = 8
    val area = square(side)

    println("side=" + side)
    println("area=" + area)
  }
}
  1. side ← 5

    6def main(args: Array[String]): Unit = {7  val side→ 5 = 5 //@side=3, 88  val area = square(side5)910  println("side=" + side)
  2. def square(value: Int): Int =

    1object Main {2  def square(value5: Int): Int = {3    value5 * value4  }
  3. area ← 25

    7    val side = 5 //@side=3, 88    val area→ 25 = square(side5)910    println("side=" + side5)11    println("area=" + area25)12  }13}
    outputside=5
    area=25
  1. side ← 3

    6def main(args: Array[String]): Unit = {7  val side→ 3 = 38  val area = square(side3)910  println("side=" + side)
  2. def square(value: Int): Int =

    1object Main {2  def square(value3: Int): Int = {3    value3 * value4  }
  3. area ← 9

    7    val side = 38    val area→ 9 = square(side3)910    println("side=" + side3)11    println("area=" + area9)12  }13}
    outputside=3
    area=9
  1. side ← 8

    6def main(args: Array[String]): Unit = {7  val side→ 8 = 88  val area = square(side8)910  println("side=" + side)
  2. def square(value: Int): Int =

    1object Main {2  def square(value8: Int): Int = {3    value8 * value4  }
  3. area ← 64

    7    val side = 88    val area→ 64 = square(side8)910    println("side=" + side8)11    println("area=" + area64)12  }13}
    outputside=8
    area=64

What Happens

  1. square(value) returns value * value.
  2. side starts at 5.
  3. square(side) sends 5 into the function.
  4. area becomes 25.
  5. The program prints side=5 and area=25.

Function Picture

| side | area | | --- | --- | | 3 | 9 | | 5 | 25 | | 8 | 64 |

Exercise: Functions.scala

Reproduce area=25 for side 5, then use the pinned sides 3 and 8 to predict each area.