Log In
Or create an account ->
Imperial Library
Home
About
News
Upload
Forum
Help
Login/SignUp
Index
Functional Thinking
Preface
Chapter Overview
Conventions Used in This Book
Using Code Examples
Safari® Books Online
How to Contact Us
Acknowledgments
1. Why
Shifting Paradigms
Aligning with Language Trends
Ceding Control to the Language/Runtime
Concision
2. Shift
A Common Example
Imperative Processing
Functional Processing
Case Study: Number Classification
Imperative Number Classification
Slightly More Functional Number Classification
Java 8 Number Classifier
Functional Java Number Classifier
Common Building Blocks
Filter
Map
Fold/Reduce
Synonym Suffering
Filter
Scala
Groovy
Clojure
Map
Scala
Groovy
Clojure
Fold/Reduce
Scala
Groovy
Clojure
3. Cede
Iteration to Higher-Order Functions
Closures
Currying and Partial Application
Definitions and Distinctions
In Groovy
In Clojure
Scala
Currying
Partially applied functions
Partial (constrained) functions
Common Uses
Function factories
Template Method design pattern
Implicit values
Recursion
Seeing Lists Differently
Streams and Work Reordering
4. Smarter, Not Harder
Memoization
Caching
Method-level caching
Caching sum
Caching everything
Adding Memoization
Laziness
Lazy Iterator in Java
Totally Lazy Number Classifier
Lazy Lists in Groovy
Lazy list of perfect numbers
Building a Lazy List
Benefits of Laziness
Lazy Field Initialization
5. Evolve
Few Data Structures, Many Operations
Bending the Language Toward the Problem
Rethinking Dispatch
Improving Dispatch with Groovy
Clojure’s “Bendable” Language
Clojure Multimethods and a la carte Polymorphism
Operator Overloading
Groovy
Scala
Functional Data Structures
Functional Error Handling
The Either Class
Parsing Roman numerals
Lazy parsing and Functional Java
Providing defaults
Wrapping exceptions
The Option Class
Either Trees and Pattern Matching
Scala pattern matching
Either trees
Pattern matching for tree traversal
6. Advance
Design Patterns in Functional Languages
Function-Level Reuse
Template Method
Strategy
The Flyweight Design Pattern and Memoization
Factory and Currying
Structural Versus Functional Reuse
Code Reuse Via Structure
Refactoring to eliminate duplication
Code reuse via composition
7. Practical Thinking
Java 8
Functional Interfaces
Optional
Java 8 Streams
Functional Infrastructure
Architecture
CQRS
Web Frameworks
Databases
8. Polyglot and Polyparadigm
Combining Functional with Metaprogramming
Mapping Data Types with Metaprogramming
Infinite Streams with Functional Java and Groovy
Consequences of Multiparadigm Languages
Context Versus Composition
Functional Pyramid
Index
Colophon
Copyright
← Prev
Back
Next →
← Prev
Back
Next →