Writing efficient code is an important part of software engineering. A lot of times, we will see cases where an expression is expensive to evaluate due to different possible reasons—database access, complex calculations, and so on. There are cases where we might even be able to exit the application without even evaluating these expensive expressions. This is where lazy evaluation becomes helpful.
Scala supports lazy evaluation in a couple of flavors—lazy variables and by-name parameters. We have already seen both in this book the former we saw when we looked at creational design patterns in Chapter 6, Creational Design Patterns, and more specifically, lazy initialization. We saw the latter in a few places, but we encountered it for the first time in Chapter...