Composing Software
Douban
An Exploration of Functional Programming and Object Composition in JavaScript
Eric Elliott
sinopsis
All software design is composition: the act of breaking complex problems down into smaller problems and composing those solutions. Most developers have a limited understanding of compositional techniques. It's time for that to change.In "Composing Software", Eric Elliott shares the fundamentals of composition, including both function composition and object composition, and explores them in the context of JavaScript. The book covers the foundations of both functional programming and object oriented programming to help the reader better understand how to build and structure complex applications using simple building blocks.You'll learn:Functional programmingObject compositionHow to work with composite data structuresClosuresHigher order functionsFunctors (e.g., array.map)Monads (e.g., promises)TransducersLensesAll of this in the context of JavaScript, the most used programming language in the world. But the learning doesn't stop at JavaScript. You'll be able to apply these lessons to any language. This book is about the timeless principles of software composition and its lessons will outlast the hot languages and frameworks of today. Unlike most programming books, this one may still be relevant 20 years from now.This book began life as a popular blog post series that attracted hundreds of thousands of readers and influenced the way software is built at many high growth tech startups and fortune 500 companies.
contenidos
Thank You
Composing Software: An Introduction
You Compose Software Every Day
Conclusion
The Dao of Immutability (The Way of the Functional Programmer)
Forward
The Rise and Fall and Rise of Functional Programming (Composable Software)
The Rise of Functional Programming
The Fall of Functional Programming
The Rise of Functional Programming
Functional Programming Has Always Been Alive and Well
Why Learn Functional Programming in JavaScript?
Pure Functions
What is a Function?
Mapping
Pure Functions
The Trouble with Shared State
Same Input, Same Output
No Side Effects
Conclusion
What is Functional Programming?
Pure Functions
Function Composition
Shared State
Immutability
Side Effects
Reusability Through Higher Order Functions
Containers, Functors, Lists, and Streams
Declarative vs Imperative
Conclusion
A Functional Programmer’s Introduction to JavaScript
Expressions and Values
Types
Destructuring
Comparisons and Ternaries
Functions
Currying
Function Composition
Arrays
Method Chaining
Conclusion
Higher Order Functions
Curry and Function Composition
What is a curried function?
What is a partial application?
What’s the Difference?
What is point-free style?
Why do we curry?
Trace
Curry and Function Composition, Together
Conclusion
Abstraction & Composition
Abstraction is simplification.
Abstraction in Software
Abstraction through composition
How to Do More with Less Code
Conclusion
Reduce
Reduce is Versatile
Conclusion
Functors & Categories
Why Functors?
Functor Laws
Category Theory
Build Your Own Functor
Curried Map
Conclusion
Monads
You’re probably already using monads.
What Monads are Made of
Building a Kleisli Composition Function
The Monad Laws
Conclusion
The Forgotten History of OOP
The Big Idea
The Essence of OOP
What OOP Doesn’t Mean
What is an object?
We’ve lost the plot.
Object Composition
What is Object Composition?
Three Different Forms of Object Composition
Notes on Code Examples
Aggregation
Concatenation
Delegation
Conclusion
Factory Functions
Literals for One, Factories for Many
Returning Objects
Destructuring
Computed Property Keys
Default Parameters
Type Inference
Factory Functions for Mixin Composition
Conclusion
Functional Mixins
Motivation
What are mixins?
What is functional inheritance?
What is a functional mixin?
Composing Functional Mixins
When to Use Functional Mixins
Caveats
Conclusion
Why Composition is Harder with Classes
The Delegate Prototype
The .constructor Property
Class to Factory is a Breaking Change
Composable Custom Data Types
You can do this with any data type
Composable Currency
Lenses
Why Lenses?
Background
Lens Laws
Composing Lenses
Transducers
Why Transducers?
Background and Etymology
A Musical Analogy for Transducers
Transducers compose top-to-bottom.
Transducer Rules
Transducing
The Transducer Protocol
Conclusion
Elements of JavaScript Style
1. Make the function the unit of composition. One job for each function.
2. Omit needless code.
3. Use active voice.
4. Avoid a succession of loose statements.
5. Keep related code together.
6. Put statements and expressions in positive form.
7. Use parallel code for parallel concepts.
Conclusion: Code should be simple, not simplistic.
Mocking is a Code Smell
TDD should lead to better design.
What is a code smell?
What is a mock?
What is a unit test?
What is test coverage?
What is tight coupling?
What causes tight coupling?
What does composition have to do with mocking?
How do we remove coupling?
“Code smells” are warning signs, not laws. Mocks are not evil.