We have covered a lot of ground in this chapter! We went through a journey of discovery—we started by listing the outputs and corresponding inputs for our problem, decomposed them, and figured out how to transform the inputs in the requisite outputs. We saw how small functions and the functional operations give us agility when new features are requested. We saw how to use any, all, none, find_if, map/transform, and reduce/accumulate, and how to use optional types or default values to support all possible cases in our code.
Now that we have an idea of how to write code in functional style, it's time to see how this approach fits with OO programming in the next chapter.