Options and Error Handling
Transforming an Option
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
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)
}
}
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
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