Hide internal limits while exposing simple labels.

private-state Private values keep internal rules inside a class while public fields return simple results.

Private State

raw
PrivateHelpers.scala
Replay: real traced execution (multi-file project)
class ScoreCard(raw: Int) {
  private val low = 0
  private val high = 100

  val score = {
    if (raw < low) {
      low
    } else if (raw > high) {
      high
    } else {
      raw
    }
  }

  val label = if (score >= 60) "pass" else "retry"

  override def toString: String = "[score-card]"
}

object Main {
  def main(args: Array[String]): Unit = {
    val raw = 105
    val card = new ScoreCard(raw)

    println("raw=" + raw)
    println("score=" + card.score)
    println("label=" + card.label)
  }
}
class ScoreCard(raw: Int) {
  private val low = 0
  private val high = 100

  val score = {
    if (raw < low) {
      low
    } else if (raw > high) {
      high
    } else {
      raw
    }
  }

  val label = if (score >= 60) "pass" else "retry"

  override def toString: String = "[score-card]"
}

object Main {
  def main(args: Array[String]): Unit = {
    val raw = -3
    val card = new ScoreCard(raw)

    println("raw=" + raw)
    println("score=" + card.score)
    println("label=" + card.label)
  }
}
class ScoreCard(raw: Int) {
  private val low = 0
  private val high = 100

  val score = {
    if (raw < low) {
      low
    } else if (raw > high) {
      high
    } else {
      raw
    }
  }

  val label = if (score >= 60) "pass" else "retry"

  override def toString: String = "[score-card]"
}

object Main {
  def main(args: Array[String]): Unit = {
    val raw = 88
    val card = new ScoreCard(raw)

    println("raw=" + raw)
    println("score=" + card.score)
    println("label=" + card.label)
  }
}
  1. raw ← 105

    20object Main {21  def main(args: Array[String]): Unit = {22    val raw→ 105 = 105 //@raw=88, -323    val card = new ScoreCard(raw105)2425    println("raw=" + raw)
  2. if (raw > high)

    7  low8} else if (raw105 > high100) {9  high
  3. card ← [score-card]

    22    val raw = 105 //@raw=88, -323    val card→ [score-card] = new ScoreCard(raw105)2425    println("raw=" + raw105)26    println("score=" + card.score100)27    println("label=" + card.labelpass)28  }29}
    outputraw=105
    score=100
    label=pass
  1. raw ← -3

    20object Main {21  def main(args: Array[String]): Unit = {22    val raw→ -3 = -323    val card = new ScoreCard(raw-3)2425    println("raw=" + raw)
  2. if (raw < low)

    5val score = {6  if (raw-3 < low0) {7    low
  3. card ← [score-card]

    22    val raw = -323    val card→ [score-card] = new ScoreCard(raw-3)2425    println("raw=" + raw-3)26    println("score=" + card.score0)27    println("label=" + card.labelretry)28  }29}
    outputraw=-3
    score=0
    label=retry
  1. raw ← 88

    20object Main {21  def main(args: Array[String]): Unit = {22    val raw→ 88 = 8823    val card = new ScoreCard(raw88)2425    println("raw=" + raw)
  2. card ← [score-card]

    22    val raw = 8823    val card→ [score-card] = new ScoreCard(raw88)2425    println("raw=" + raw88)26    println("score=" + card.score88)27    println("label=" + card.labelpass)28  }29}
    outputraw=88
    score=88
    label=pass