Values, Types, and Expressions
Expression Blocks
Return values from branches and blocks.
expression-blocks
In Scala, many control structures are expressions. They can calculate a value and assign it to a name.
Expression Blocks
ExpressionBlocks.scala
Replay: real traced execution (multi-file project)
object Main {
def main(args: Array[String]): Unit = {
val score = 75
val label = if (score >= 60) "pass" else "retry"
val bonus = 5
val adjusted = {
score + bonus
}
println("score=" + score)
println("label=" + label)
println("adjusted=" + adjusted)
}
}
object Main {
def main(args: Array[String]): Unit = {
val score = 45
val label = if (score >= 60) "pass" else "retry"
val bonus = 5
val adjusted = {
score + bonus
}
println("score=" + score)
println("label=" + label)
println("adjusted=" + adjusted)
}
}
object Main {
def main(args: Array[String]): Unit = {
val score = 90
val label = if (score >= 60) "pass" else "retry"
val bonus = 5
val adjusted = {
score + bonus
}
println("score=" + score)
println("label=" + label)
println("adjusted=" + adjusted)
}
}
score ← 75, label ← pass, bonus ← 5, adjusted ← 80
1object Main {2 def main(args: Array[String]): Unit = {3 val score→ 75 = 75 //@score=45, 904 val label→ pass = if (score75 >= 60) "pass" else "retry"5 val bonus→ 5 = 56 val adjusted→ 80 = {7 score75 + bonus58 }910 println("score=" + score75)11 println("label=" + labelpass)12 println("adjusted=" + adjusted80)13 }14}outputscore=75 label=pass adjusted=80
score ← 45, label ← retry, bonus ← 5, adjusted ← 50
1object Main {2 def main(args: Array[String]): Unit = {3 val score→ 45 = 454 val label→ retry = if (score45 >= 60) "pass" else "retry"5 val bonus→ 5 = 56 val adjusted→ 50 = {7 score45 + bonus58 }910 println("score=" + score45)11 println("label=" + labelretry)12 println("adjusted=" + adjusted50)13 }14}outputscore=45 label=retry adjusted=50
score ← 90, label ← pass, bonus ← 5, adjusted ← 95
1object Main {2 def main(args: Array[String]): Unit = {3 val score→ 90 = 904 val label→ pass = if (score90 >= 60) "pass" else "retry"5 val bonus→ 5 = 56 val adjusted→ 95 = {7 score90 + bonus58 }910 println("score=" + score90)11 println("label=" + labelpass)12 println("adjusted=" + adjusted95)13 }14}outputscore=90 label=pass adjusted=95
Follow the Expression
scorestarts at75.- The branch checks whether
score >= 60. 75passes, solabelbecomespass.bonusis5.adjustedbecomes80, and the program printsadjusted=80. | score | label | adjusted | | --- | --- | --- | | 45 | retry | 50 | | 75 | pass | 80 | | 90 | pass | 95 |
Exercise: ExpressionBlocks.scala
Reproduce label=pass and adjusted=80, then use scores 45 and 90 to predict each row.