Muutke küpsiste eelistusi

Functional Thinking [Pehme köide]

  • Formaat: Paperback / softback, 325 pages
  • Ilmumisaeg: 19-Aug-2014
  • Kirjastus: O'Reilly Media
  • ISBN-10: 1449365515
  • ISBN-13: 9781449365516
Teised raamatud teemal:
  • Pehme köide
  • Hind: 39,09 €*
  • * hind on lõplik, st. muud allahindlused enam ei rakendu
  • Tavahind: 45,99 €
  • Säästad 15%
  • Raamatu kohalejõudmiseks kirjastusest kulub orienteeruvalt 2-4 nädalat
  • Kogus:
  • Lisa ostukorvi
  • Tasuta tarne
  • Tellimisaeg 2-4 nädalat
  • Lisa soovinimekirja
  • Formaat: Paperback / softback, 325 pages
  • Ilmumisaeg: 19-Aug-2014
  • Kirjastus: O'Reilly Media
  • ISBN-10: 1449365515
  • ISBN-13: 9781449365516
Teised raamatud teemal:

If you want to take advantage of functional programming features in Java and other languages, this in-depth guide takes you beyond syntax and demonstrates how you need to think in a new way. Software architect Neal Ford shows intermediate to advanced developers how functional coding allows you to step back a level of abstraction so you can see your programming problem with greater clarity.

Each chapter shows you various examples of functional thinking, using numerous code examples from Java 8 and other JVM languages that include functional capabilities. This book may bend your mind, but you’ll come away with a good grasp of functional programming concepts.

  • Understand why many imperative languages are adding functional capabilities
  • Compare functional and imperative solutions to common problems
  • Examine ways to cede control of routine chores to the runtime
  • Learn how memoization and laziness eliminate hand-crafted solutions
  • Explore functional approaches to design patterns and code reuse
  • View real-world examples of functional thinking with Java 8, and in functional architectures and web frameworks
  • Learn the pros and cons of living in a paradigmatically richer world
Preface vii
1 Why 1(10)
Shifting Paradigms
2(2)
Aligning with Language Trends
4(1)
Ceding Control to the Language/Runtime
4(1)
Concision
5(6)
2 Shift 11(28)
A Common Example
11(6)
Imperative Processing
11(1)
Functional Processing
12(5)
Case Study: Number Classification
17(7)
Imperative Number Classification
17(2)
Slightly More Functional Number Classification
19(2)
Java 8 Number Classifier
21(1)
Functional Java Number Classifier
22(2)
Common Building Blocks
24(7)
Filter
24(1)
Map
25(4)
Fold/Reduce
29(2)
Synonym Suffering
31(8)
Filter
31(3)
Map
34(2)
Fold/Reduce
36(3)
3 Cede 39(20)
Iteration to Higher-Order Functions
39(1)
Closures
40(4)
Currying and Partial Application
44(8)
Definitions and Distinctions
44(1)
In Groovy
45(2)
In Clojure
47(1)
Scala
47(4)
Common Uses
51(1)
Recursion
52(4)
Seeing Lists Differently
52(4)
Streams and Work Reordering
56(3)
4 Smarter, Not Harder 59(24)
Memoization
59(11)
Caching
60(3)
Adding Memoization
63(7)
Laziness
70(13)
Lazy Iterator in Java
70(2)
Totally Lazy Number Classifier
72(2)
Lazy Lists in Groovy
74(3)
Building a Lazy List
77(3)
Benefits of Laziness
80(2)
Lazy Field Initialization
82(1)
5 Evolve 83(30)
Few Data Structures, Many Operations
83(2)
Bending the Language Toward the Problem
85(1)
Rethinking Dispatch
86(5)
Improving Dispatch with Groovy
86(1)
Clojure's "Bendable" Language
87(2)
Clojure Multimethods and a la carte Polymorphism
89(2)
Operator Overloading
91(4)
Groovy
91(2)
Scala
93(2)
Functional Data Structures
95(18)
Functional Error Handling
96(1)
The Either Class
97(8)
The Option Class
105(1)
Either Trees and Pattern Matching
106(7)
6 Advance 113(20)
Design Patterns in Functional Languages
113(1)
Function-Level Reuse
114(10)
Template Method
116(2)
Strategy
118(1)
The Flyweight Design Pattern and Memoization
119(3)
Factory and Currying
122(2)
Structural Versus Functional Reuse
124(9)
Code Reuse Via Structure
124(9)
7 Practical Thinking 133(12)
Java 8
133(4)
Functional Interfaces
135(1)
Optional
136(1)
Java 8 Streams
136(1)
Functional Infrastructure
137(8)
Architecture
137(4)
Web Frameworks
141(1)
Databases
142(3)
8 Polyglot and Polyparadigm 145(14)
Combining Functional with Metaprogramming
146(1)
Mapping Data Types with Metaprogramming
147(3)
Infinite Streams with Functional Java and Groovy
148(2)
Consequences of Multiparadigm Languages
150(1)
Context Versus Composition
151(3)
Functional Pyramid
154(5)
Index 159
Neal is an Application Architect at ThoughtWorks, a global IT consultancy with an exclusive focus on end-to-end software development and delivery. Before joining ThoughtWorks, Neal was the Chief Technology Officer at The DSW Group, Ltd., a nationally recognized training and development firm. Neal has a degree in Computer Science from Georgia State University specializing in languages and compilers and a minor in mathematics specializing in statistical analysis. He is also the designer and developer of applications, instructional materials, magazine articles, video presentations, and author of the books Developing with Delphi: Object-Oriented Techniques (Prentice-Hall, 1996), JBuilder 3 Unleashed (Sams, 1999) (as the lead author), Art of Java Web Development (Manning, 2003), and No Fluff, Just Stuff Anthology: The 2006 Edition (editor and contributor). His language proficiencies include Java, C#/.NET, Ruby, Object Pascal, C++, and C. His primary consulting focus is the design and construction of large-scale enterprise applications. Neal has taught on-site classes nationally and internationally to all phases of the military and to many Fortune 500 companies. He is also an internationally acclaimed speaker, having spoken at numerous developer conferences worldwide.If you have an insatiable curiosity about Neal, visit his web site at http://www.nealford.com. He welcomes feedback and can be reached at nford@thoughtworks.com.