Thinking functionally


Chapter 18 from Modern Java in Action by Raoul-Gabriel Urma, Mario Fusco, Alan Mycroft

This chapter covers

  • Why functional programming?
  • What defines functional programming?
  • Declarative programming and referential transparency
  • Guidelines for writing functional-style Java
  • Iteration versus recursion

You’ve seen the term functional quite frequently throughout this book. By now, you may have some ideas about what being functional entails. Is it about lambdas and first-class functions or about restricting your right to mutate objects? What do you achieve from adopting a functional style?

In this chapter, we shed light on the answers to these questions. We explain what functional programming is and introduce some of its terminology. First, we examine the concepts behind functional programming—such as side effects, immutability, declarative programming, and referential transparency—and then we relate these concepts to Java 8. In chapter 19, we look more closely at functional programming techniques such as higher-order functions, currying, persistent data structures, lazy lists, pattern matching, and combinators.

18.1. Implementing and maintaining systems

18.2. What’s functional programming?

18.3. Recursion vs. iteration

18.4. Summary