Functional Design: Principles, Patterns, and Practices

Functional Design: Principles, Patterns, and Practices

Functional Design: Principles, Patterns, and Practices
Автор: Martin Robert Cecil
Дата выхода: 2024
Издательство: Pearson Education Limited
Количество страниц: 376
Размер файла: 3.2 MB
Тип файла: PDF
Добавил: codelibs
 Проверить на вирусы

Foreword xiii
Preface xv
Acknowledgments xxi
About the Author xxiii
PART I Functional Basics....1
Chapter 1 Immutability....3
What Is Functional Programming?....4
The Problem with Assignment....7
So Why Is It Called Functional?....10
No Change of State?....12
Immutability....15
Chapter 2 Persistent Data....17
On Cheating....19
Making Copies....20
Structural Sharing....23
Contents
Chapter 3 Recursion and Iteration....27
Iteration....28
Very Brief Clojure Tutorial....29
Iteration....32
TCO, Clojure, and the JVM....32
Recursion....32
Chapter 4 Laziness....37
Lazy Accumulation....40
OK, but Why?....41
Coda....42
Chapter 5 Statefulness....43
When We MUST Mutate....47
Software Transactional Memory (STM)....48
Life Is Hard, Software Is Harder....51
PART II Comparative Analysis....53
Chapter 6 Prime Factors....55
Java Version....56
Clojure Version....60
Conclusion....63
Chapter 7 Bowling Game....65
Java Version....66
Clojure Version....71
Conclusion....75
Chapter 8 Gossiping Bus Drivers....77
Java Solution....78
Driver....84
Route....85
Stop....85
Rumor....86
Simulation....87
Clojure....88
Conclusion....93
Chapter 9 Object-Oriented Programming....95
Functional Payroll....98
Namespaces and Source Files....107
Conclusion....108
Chapter 10 Types....109
PART III Functional Design....115
Chapter 11 Data Flow....117
Chapter 12 SOLID....125
The Single Responsibility Principle (SRP)....126
The Open-Closed Principle (OCP)....131
Functions....133
Objects with Vtables....134
Multi-methods....135
Independent Deployability....136
The Liskov Substitution Principle (LSP)....138
The ISA Rule....142
Nope!....145
The Representative Rule....146
The Interface Segregation Principle (ISP)....147
Don’t Depend on Things You Don’t Need....150
Why?....151
Conclusion....151
The Dependency Inversion Principle (DIP)....152
A Blast from the Past....155
A DIP Violation....165
Conclusion....179
PART IV Functional Pragmatics....181
Chapter 13 Tests....183
But What about the REPL?....184
What about Mocks?....184
Property-Based Testing....186
A Diagnostic Technique....190
Functional....197
Chapter 14 GUI....199
Turtle-Graphics in Quil....200
Chapter 15 Concurrency....215
Conclusion....225
PART V Design Patterns....227
Chapter 16 Design Patterns Review....229
Patterns in Functional Programming....233
Abstract Server....233
Adapter....236
Is That Really an Adapter Object?....241
Command....242
Undo....245
Composite....249
Functional?....254
Decorator....260
Visitor....264
To Close, or to Clojure?....267
The 90-degree Problem....270
Abstract Factory....274
90 Degrees Again....279
Type Safety?....281
Conclusion....281
Postscript: OO Poison?....282
PART VI Case Study....285
Chapter 17 Wa-Tor....287
Scratch That Itch....309
Showers Solve Problems....312
It’s Time to Wildly Reproduce....322
What about the Sharks?....324
Conclusion....335
Afterword....337
Index....341

In Functional Design, renowned software engineer Robert C. Martin ("Uncle Bob") explains how and why to use functional programming to build better systems for real customers. Martin compares conventional object-oriented coding structures in Java to those enabled by functional languages, identifies the best roles for each, and shows how to build better systems by judiciously using them in context.

Martin's approach is pragmatic, minimizing theory in favor of "in the-trenches" problem-solving. Through accessible examples, working developers will discover how the easy-to-learn, semantically rich Clojure language can help them improve code cleanliness, design, discipline, and outcomes. Martin examines well-known SOLID principles and Gang of Four Design Patterns from a functional perspective, revealing why patterns remain extremely valuable to functional programmers, and how to use them to achieve superior results.

  • Understand functional basics: immutability, persistent data, recursion, iteration, laziness, and statefulness

  • Contrast functional and object approaches through expertly crafted case studies

  • Explore functional design techniques for data flow

  • Use classic SOLID principles to write better Clojure code

  • Master pragmatic approaches to functional testing, GUIs, and concurrency

  • Make the most of design patterns in functional environments

  • Walk through building an enterprise-class Clojure application


Похожее:

Список отзывов:

Нет отзывов к книге.