Change the value inside an Option when present.

map-transform `map` applies a function to the value inside a `Some` and leaves a `None` unchanged. `getOrElse` then reads the result or a fallback.

Transforming an Option

raw
MapTransform.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val raw = 5
    val maybe: Option[Int] = if (raw > 0) Some(raw) else None
    val doubled = maybe.map(n => n * 2)
    val result = doubled.getOrElse(0)

    println("hasValue=" + maybe.isDefined)
    println("result=" + result)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val raw = 0
    val maybe: Option[Int] = if (raw > 0) Some(raw) else None
    val doubled = maybe.map(n => n * 2)
    val result = doubled.getOrElse(0)

    println("hasValue=" + maybe.isDefined)
    println("result=" + result)
  }
}
  1. raw ← 5, maybe ← Some(5), doubled ← Some(10), result ← 10

    1object Main {2  def main(args: Array[String]): Unit = {3    val raw→ 5 = 5 //@raw=04    val maybe→ Some(5): Option[Int] = if (raw5 > 0) Some(raw) else None5    val doubled→ Some(10) = maybeSome(5).map(n => n * 2)6    val result→ 10 = doubledSome(10).getOrElse(0)78    println("hasValue=" + maybe.isDefinedtrue)9    println("result=" + result10)10  }11}
    outputhasValue=true
    result=10
  1. raw ← 0, maybe ← None, doubled ← None, result ← 0

    1object Main {2  def main(args: Array[String]): Unit = {3    val raw→ 0 = 04    val maybe→ None: Option[Int] = if (raw0 > 0) Some(raw) else None5    val doubled→ None = maybeNone.map(n => n * 2)6    val result→ 0 = doubledNone.getOrElse(0)78    println("hasValue=" + maybe.isDefinedfalse)9    println("result=" + result0)10  }11}
    outputhasValue=false
    result=0