Chapter 8. for Comprehensions in Depth
“for Comprehensions” described the syntax for for comprehensions, including lots of examples. At this point, they look like a nice, more flexible version of the venerable for loop, but not much more. In fact, lots of sophistication lies below the surface. This chapter explores how for comprehension syntax is a more concise way to use foreach, map, flatMap, and withFilter, some of the functional combinators we discussed in the previous chapter. You can write concise code with elegant solutions to a number of design problems.
We’ll finish with some practical design problems implemented using for comprehensions, such as error handling during the execution of a sequence of processing steps.
Recap: The Elements of for Comprehensions
A for comprehension contains one or more generator expressions, optional guard expressions for filtering, and optional value definitions. The output can be yielded to create a new collection, or a side-effecting block of code can be executed on each pass, such as printing output. The following example demonstrates all these features. It removes blank lines from a text file. This is a full program with an example of how to parse input arguments (although there are libraries available for this purpose), handle help messages, etc.:
// src/main/scala/progscala3/forcomps/RemoveBlanks.scalapackageprogscala3.forcompsobjectRemoveBlanks:defapply(path:String,compress:Boolean,numbers:Boolean):Seq[String]=for
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access