What is an Option anyway?
One of the things that confused me when I first started learning about the
Option type in Scala was that I couldn't understand why it was possible to call flatMap and flatten on an
It turns out that
Option[T] can be considered a special type of collection with two possible values - either a collection with zero elements, or a collection with exactly one value of type
It's possible in Scala to convert an
Option into a list, by calling the
toList method on it, which yields some interesting results:
scala> val opt = Some("bunny") opt: Some[String] = Some(bunny) scala> opt.toList res5: List[String] = List(bunny) scala> val noBunny = None noBunny: None.type = None scala> noBunny.toList res6: List[Nothing] = List()
Indeed, we can see that the
None value yields the empty list, and that the
Some value yields a list with one element.
So what does that mean?
Now we know that
Option can be treated as a collection, it means we get to use them in a functional way, and all the funtional operators like
One particular use case I came across was where I wanted to do some processing on a
User had an
Option[String] type as its username. I didn't want to do the processing if the username value was
None. Here's the code:
As you can see, I'm using flatMap to convert any
None values to the empty List and effectively remove them from my processing.
I have also included the flatMap and map version converted to using for comprehensions which you may find a little easier to read, although to the Scala beginner they often look a little magical.