Transform a present value and skip a missing one.

option-for A `for` over an `Option` yields a new `Option`: it transforms the value inside a `Some` and leaves a `None` empty, like `map`.

For over an Option

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

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

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

    1object Main {2  def main(args: Array[String]): Unit = {3    val n→ 5 = 5 //@n=04    val maybe→ Some(5): Option[Int] = if (n5 > 0) Some(n) else None5    val result→ Some(10) = for (v <- maybeSome(5)) yield v * 26    val value→ 10 = resultSome(10).getOrElse(0)78    println("hasValue=" + result.isDefinedtrue)9    println("value=" + value10)10  }11}
    outputhasValue=true
    value=10
  1. n ← 0, maybe ← None, result ← None, value ← 0

    1object Main {2  def main(args: Array[String]): Unit = {3    val n→ 0 = 04    val maybe→ None: Option[Int] = if (n0 > 0) Some(n) else None5    val result→ None = for (v <- maybeNone) yield v * 26    val value→ 0 = resultNone.getOrElse(0)78    println("hasValue=" + result.isDefinedfalse)9    println("value=" + value0)10  }11}
    outputhasValue=false
    value=0