This common pattern feels a bit verbose:
if (condition)
Some(result)
else None
I was thinking of using a function to simplify:
def on[A](cond: Boolean)(f: => A) = if (cond) Some(f) else None
This reduces the top example to:
on (condition) { result }
Does something like this exist already? Or is this overkill?
You could create the Option
first and filter on that with your condition:
Option(result).filter(condition)
or if condition
is not related to result
Option(result).filter(_ => condition)
Scalaz includes the option function:
import scalaz.syntax.std.boolean._
true.option("foo") // Some("foo")
false.option("bar") // None
Starting Scala 2.13
, Option
is now provided with the when
builder which does just that:
Option.when(condition)(result)
For instance:
Option.when(true)(45)
// Option[Int] = Some(45)
Option.when(false)(45)
// Option[Int] = None
Also note the coupled unless
method which does the opposite.
You can use the PartialFunction
companion object and condOpt
:
PartialFunction.condOpt(condition) {case true => result}
Usage:
scala> PartialFunction.condOpt(false) {case true => 42}
res0: Option[Int] = None
scala> PartialFunction.condOpt(true) {case true => 42}
res1: Option[Int] = Some(42)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With