{"product_id":"154714","title":"Functional coding that's easy to understand ","description":"\u003ccenter\u003e\u003cdiv style=\"text-align:center\"\u003e\u003cimg src=\"https:\/\/tmgdisk01.cafe24.com\/images\/vs\/4172\/sv\/3jYDPLHC0ySg0N1y70Z3INAEBVVD9W.png?v=1765081489\" style=\"max-width:100%;max-height:10px\"\u003e\u003c\/div\u003e\u003c\/center\u003e\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\u003ccenter\u003e\n\n\u003cdiv style=\"width:95%\"\u003e\n\n\u003cdiv style=\"text-align:center;font-size:30px;font-weight:bolder;line-height:1.6em\"\u003e Functional coding that's easy to understand \u003c\/div\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003cdiv style=\"border-bottom:1px;border-bottom-style:dotted;border-color:;padding-bottom:20px\"\u003e\u003ccenter\u003e\u003ctable align=\"center\" width=\"100%\"\u003e\u003ctbody style=\"border:0px\"\u003e\n\n\u003ctr\u003e\u003ctd align=\"center\" style=\"line-height:1.2em;text-align:center;font-size:18px;color:black;font-weight:bold;padding-bottom:20px;\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\n\n\u003ctr\u003e\u003ctd style=\"text-align:center\"\u003e\u003cimg src=\"https:\/\/image.yes24.com\/goods\/108748841\/XL\" style=\"max-width:100%;height:auto\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\n\n\n\u003c\/tbody\u003e\u003c\/table\u003e\u003c\/center\u003e\u003c\/div\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003cdiv style=\"width:95%;{split_style6}padding-top:20px;padding-bottom:20px\"\u003e\n\n\u003cdiv style=\"text-align:left;font-size:16px;font-weight:bold;padding-bottom:20px\"\u003e Description \u003c\/div\u003e\n\n\u003cdiv style=\"text-align:left;word-break:break-all;font-size:14px;line-height:1.6em;\"\u003e\n\n\u003cdiv\u003e\u003ch5\u003e \u003cb\u003eBook Introduction\u003c\/b\u003e\n\u003c\/h5\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\u003cdiv\u003e \u003cb\u003eA must-read for dealing with the complexity of software.\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e This book covers how to simplify programming by using functional thinking to prevent unintended complexity from spreading throughout your code. \u003cbr\u003eLearn how to distinguish between actions that change the state of a system and computations that don't, and how to refactor actions into computations to simplify software.\u003cbr\u003e It also shows you how to solve timing issues that arise when using asynchrony and multithreading.\u003cbr\u003e You'll also learn how to eliminate repetitive code and increase expressiveness.\u003cbr\u003e It will give you a lot of inspiration to create better software.\u003cbr\u003e\n\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv\u003e\u003cul\u003e\u003cli\u003e You can preview some of the book's contents.\u003cbr\u003e \u003cspan\u003ePreview\u003c\/span\u003e\n\n\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cbr\u003e\u003cdiv\u003e\u003ch5\u003e \u003cb\u003eindex\u003c\/b\u003e\n\u003c\/h5\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e Translator's Preface xvii\u003cbr\u003e Beta Reader Review xix\u003cbr\u003e Recommendation xxi\u003cbr\u003e Preface xxvi\u003cbr\u003e Acknowledgments xxviii\u003cbr\u003e About this book xxx\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 1 Welcome to Functional Coding: A Simple Guide to Learning\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e What is functional programming? 2\u003cbr\u003e Problems with Functional Programming Definitions from a Practical Perspective 3\u003cbr\u003e Functional Programming Definitions Confuse Managers 4 \u003cbr\u003e5. Viewing Functional Programming as a Technique and Concept, Not an Academic Knowledge\u003cbr\u003e Distinguishing Actions, Calculations, and Data 6\u003cbr\u003e Functional programmers distinguish between code that must be called with caution 7\u003cbr\u003e Functional programmers distinguish between code that runs and code that doesn't 8\u003cbr\u003e Functional programmers separate actions, computations, and data. 9\u003cbr\u003e In functional programming, code is divided into three categories: 10\u003cbr\u003e What are the benefits of separating actions, calculations, and data? 11\u003cbr\u003e 12 Differences Between This and Other Functional Programming Books\u003cbr\u003e What is functional thinking? 13\u003cbr\u003e 14 Basic Rules for Reading This Book\u003cbr\u003e Conclusion 16\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 2 Functional Thinking in Real Life 17\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e Welcome to Tony's Pizza 18\u003cbr\u003e Part I: Actions and Computation, Data 19\u003cbr\u003e Split code by changeability 20\u003cbr\u003e Part II: First-Class Abstraction 21\u003cbr\u003e Visualizing Distributed Systems as a Timeline 22\u003cbr\u003e Each timeline runs in a different order 23 \u003cbr\u003e24 Things I Learned About Distributed Systems Through Hard Experience\u003cbr\u003e Timeline Cutting: Making Robots Wait for Each Other 25\u003cbr\u003e 26 Things I Learned About Timelines Through Good Experience\u003cbr\u003e Conclusion 27\u003cbr\u003e\u003cbr\u003e \u003cb\u003ePART I Actions, Calculations, and Data\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 3 Understanding the Difference Between Actions, Calculations, and Data 31\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e Actions and Calculations, Data 32\u003cbr\u003e Actions, calculations, and data can be applied anywhere 33\u003cbr\u003e 36 Things I Learned While Shopping\u003cbr\u003e Applying Functional Thinking to New Code 39\u003cbr\u003e Sketching the process of sending coupons 42\u003cbr\u003e Implementing the Coupon Sending Process 47\u003cbr\u003e Applying Functional Thinking to Existing Code 54\u003cbr\u003e Actions spread throughout the code 56\u003cbr\u003e Action comes in many forms 57\u003cbr\u003e Conclusion 59\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 4 Taking Calculations Out of Actions 61\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e Welcome to MegaMart.com 62\u003cbr\u003e Calculate Free Shipping 63\u003cbr\u003e Calculating Taxes 64\u003cbr\u003e Making Testing Easy 65\u003cbr\u003e Making it easy to reuse 66\u003cbr\u003e Separating Actions, Calculations, and Data 67 \u003cbr\u003eFunctions have inputs and outputs 68\u003cbr\u003e Testing and reusability are related to input\/output 69\u003cbr\u003e Taking calculations out of action 70\u003cbr\u003e Taking another calculation out of action 73\u003cbr\u003e Let's look at the full code 85\u003cbr\u003e Conclusion 86\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 5 CREATING BETTER ACTIONS 87\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e Aligning business requirements with design 88\u003cbr\u003e Aligning business requirements and functions 89\u003cbr\u003e Principle: The fewer implicit inputs and outputs, the better 91\u003cbr\u003e Reducing Implicit Input and Output 92\u003cbr\u003e Revisiting the Code 95\u003cbr\u003e Classifying Calculations 97\u003cbr\u003e Principle: Design is untangling code 98\u003cbr\u003e Separating add_item() to Create a Better Design 99\u003cbr\u003e Extracting the Copy-On-Write Pattern 100\u003cbr\u003e Using add_item() 101\u003cbr\u003e Classifying Calculations 102\u003cbr\u003e Small functions and many calculations 106\u003cbr\u003e Conclusion 107\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 6 Maintaining Immutability in Languages ​​with Mutable Data Structures 109\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e Can all actions be made invariant? 110\u003cbr\u003e Classifying actions as reading, writing, or both 111 \u003cbr\u003eThe Copy-On-Write Principle: Three Steps 112\u003cbr\u003e Converting Writing to Reading with Copy-On-Write 113\u003cbr\u003e View differences between the original and copy-on-write versions 117\u003cbr\u003e The copy-on-write operation we created earlier is common 118\u003cbr\u003e A Look at JavaScript Arrays 119\u003cbr\u003e How do I read while writing? 122\u003cbr\u003e Separating functions that are read while writing 123\u003cbr\u003e Create a function that returns two values ​​124\u003cbr\u003e Reading immutable data structures is computational 131\u003cbr\u003e The application has a state that changes over time 132\u003cbr\u003e Immutable data structures are fast enough 133\u003cbr\u003e Copy-on-write for objects 134\u003cbr\u003e A quick look at JavaScript objects 135\u003cbr\u003e Converting nested writes to reads 140\u003cbr\u003e What kind of copy would it be? 141\u003cbr\u003e A Pictorial Exploration of Shallow Copying and Structural Sharing 142\u003cbr\u003e Conclusion 145\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 7 Maintaining Invariance While Writing Untrusted Code 147\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e Legacy Code and Immutability 148 \u003cbr\u003eThe copy-on-write code we create must interact with untrusted code. 149\u003cbr\u003e Defensive copying prevents the original from being altered 150\u003cbr\u003e Implementing Defensive Copying 151\u003cbr\u003e Defensive Copy Rule 152\u003cbr\u003e Wrapping Untrusted Code 153\u003cbr\u003e Defensive copying may be familiar to you 156\u003cbr\u003e Let's compare copy-on-write and defensive copying 158\u003cbr\u003e Deep copies are more expensive than shallow copies 159\u003cbr\u003e Implementing deep copies in JavaScript is difficult 160\u003cbr\u003e A Dialogue Between Copy-on-Write and Defensive Copying 162\u003cbr\u003e Conclusion 165\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 8 HIERARCHICAL DESIGN I 167\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e What is Software Design? 168\u003cbr\u003e What is hierarchical design? 169\u003cbr\u003e Developing Design Sense 170\u003cbr\u003e Hierarchical Design Pattern 171\u003cbr\u003e Pattern 1: Direct Implementation 172\u003cbr\u003e 3-step zoom level 186\u003cbr\u003e Removing loops 189\u003cbr\u003e Direct Implementation Pattern Review 198\u003cbr\u003e Conclusion 199\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 9 HIERARCHICAL DESIGN II 201\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e Hierarchical Design Pattern 202\u003cbr\u003e Pattern 2: Abstract Wall 203 \u003cbr\u003eHiding the implementation behind an abstraction wall 204\u003cbr\u003e Hiding details is symmetrical 205\u003cbr\u003e Changing the Shopping Cart Data Structure 206\u003cbr\u003e Re-creating the shopping cart as an object 208\u003cbr\u003e With a wall of abstraction, you don't have to worry about specifics. 209\u003cbr\u003e When is it a good idea to use an abstract wall? 210\u003cbr\u003e Pattern 2 Review: Abstract Wall 211\u003cbr\u003e The previously modified code is closer to a direct implementation 212\u003cbr\u003e Pattern 3: Small Interface 213\u003cbr\u003e Pattern 3 Review: Small Interface 219\u003cbr\u003e Pattern 4: Convenient Layer 220\u003cbr\u003e Hierarchical Design Pattern 221\u003cbr\u003e What information about the code can be gleaned from the graph? 222\u003cbr\u003e The code at the top of the graph is the easiest to fix 223\u003cbr\u003e The code below is important to test 225\u003cbr\u003e The code below is better for reuse 228\u003cbr\u003e Summary: What the Graph Tells You About Your Code 229\u003cbr\u003e Conclusion 230\u003cbr\u003e\u003cbr\u003e \u003cb\u003ePART II First-Class Abstract\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 10: First-Class Functions I 233\u003c\/b\u003e\u003cbr\u003e \u003cbr\u003eThe marketing team still needs to consult with the development team 235\u003cbr\u003e Code Smells: Implicit Arguments in Function Names 236\u003cbr\u003e Refactoring: Exposing Implicit Arguments 238\u003cbr\u003e Distinguishing between first-class and non-first-class 240\u003cbr\u003e Won't using field names as strings cause bugs? 241\u003cbr\u003e Does using first-class fields make API changes more difficult?\u003cbr\u003e You will be using too many objects and arrays 247\u003cbr\u003e Any grammar can be converted into a first-class function 250\u003cbr\u003e Loop Example: Eat and Clean Up 253\u003cbr\u003e Refactoring: Replacing a Function Body with a Callback 259\u003cbr\u003e What grammar is this? 262\u003cbr\u003e Why wrap the body in a function and pass it? 263\u003cbr\u003e Conclusion 265\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 11 First-Class Functions II 267\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e One code smell and two refactorings 268\u003cbr\u003e Copy-on-Write Refactoring 269\u003cbr\u003e Copy-on-Write Refactoring for Arrays 270\u003cbr\u003e Functions that return functions 279\u003cbr\u003e Conclusion 288\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 12 Functional Iteration 289\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e One code smell and two refactorings 290 \u003cbr\u003eMegaMart has decided to create a communications team. 291\u003cbr\u003e Deriving the map() function through examples 294\u003cbr\u003e Functional Tools: map() 295\u003cbr\u003e Three Ways to Pass Functions 297\u003cbr\u003e Example: All customers' email addresses 298\u003cbr\u003e Deriving the filter() function through examples 301\u003cbr\u003e Functional Tools: filter() 302\u003cbr\u003e Example: Customer 303 who did not purchase anything\u003cbr\u003e Deriving reduce() with examples 306\u003cbr\u003e Functional Tools: reduce() 307\u003cbr\u003e Example: Concatenating Strings 308\u003cbr\u003e 313 Things You Can Do with reduce()\u003cbr\u003e Comparing Three Functional Tools 315\u003cbr\u003e Conclusion 316\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 13: Functional Tool Chaining 317\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e The Customer Communications Team is still working 318\u003cbr\u003e Making the Chain Clear 1: Naming the Steps 324\u003cbr\u003e Making Chains Clearer 2: Naming Callbacks 325\u003cbr\u003e Making the Chain Clear 3: Comparing the Two Methods 326\u003cbr\u003e Example: Email list of customers who have only made a purchase once 327\u003cbr\u003e Refactoring Loops with Functional Tools 332\u003cbr\u003e Tip 1: Creating Data 333 \u003cbr\u003eTip 2: Manipulating an Entire Array at Once 334\u003cbr\u003e Tip 3: Break it down into smaller steps 335\u003cbr\u003e Comparing Procedural and Functional Code 337\u003cbr\u003e Chaining Tip Summary 338\u003cbr\u003e Tips for Chaining Debugging 340\u003cbr\u003e Various functional tools 341\u003cbr\u003e reduce() to create values ​​345\u003cbr\u003e Get Creative with Data 347\u003cbr\u003e Sorting by method operator 353\u003cbr\u003e Conclusion 354\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 14 Using Functional Tools with Nested Data 355\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e Higher-Order Functions for Manipulating Objects 356\u003cbr\u003e Make field names explicit 357\u003cbr\u003e Deriving update() 358\u003cbr\u003e Using update() to change values ​​359\u003cbr\u003e Refactoring: Replace Get, Change, and Set with update() 361\u003cbr\u003e Functional Tools: update() 362\u003cbr\u003e Visualizing values ​​in objects 363\u003cbr\u003e Visualizing Nested Updates 368\u003cbr\u003e Using update() with nested data 369\u003cbr\u003e Deriving updateOption() 370\u003cbr\u003e Deriving update2() 371\u003cbr\u003e Visualizing update2() for nested objects 372\u003cbr\u003e Four Ways to Create incrementSizeByName() 374 \u003cbr\u003eDeriving update3() 375\u003cbr\u003e Deriving nestedUpdate() 377\u003cbr\u003e Safe Recursion Usage 382\u003cbr\u003e Visualizing nestedUpdate() 383\u003cbr\u003e Why Recursive Functions Are Suitable 384\u003cbr\u003e 386 Things to Consider When Designing Deeply Nested Structures\u003cbr\u003e Using Abstraction Walls for Deeply Nested Data 387\u003cbr\u003e Higher-order functions learned previously 388\u003cbr\u003e Conclusion 389\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 15: Isolating the Timeline 391\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e There's a bug! 392\u003cbr\u003e Let's double click quickly 393\u003cbr\u003e A timeline diagram shows what happens over time 395\u003cbr\u003e Two Timeline Diagram Basic Rules 396\u003cbr\u003e Two facts about the action sequence that you might miss if you look closely 400\u003cbr\u003e Drawing an add-to-cart timeline: Steps 1-401\u003cbr\u003e Asynchronous calls draw to a new timeline 402\u003cbr\u003e Different languages, different thread models 403\u003cbr\u003e Creating a Timeline Step by Step 404\u003cbr\u003e Drawing an add-to-cart timeline: Step 2 406 \u003cbr\u003eYou can see from the timeline diagram that there are two types of code that are executed sequentially 407\u003cbr\u003e A timeline diagram shows that concurrently executing code has an unpredictable order 408\u003cbr\u003e Principle 409 of a Good Timeline\u003cbr\u003e Single-Threaded JavaScript 410\u003cbr\u003e Asynchronous Queues in JavaScript 411\u003cbr\u003e AJAX and Event Queues 412\u003cbr\u003e Complete Asynchronous Example 413\u003cbr\u003e Simplifying the Timeline 414\u003cbr\u003e Reading the Completed Timeline 420\u003cbr\u003e Simplifying Your Add-to-Cart Timeline: Step 3 422\u003cbr\u003e Review: Drawing a Timeline (Steps 1-3) 424\u003cbr\u003e Summary: Drawing a Timeline Diagram 426\u003cbr\u003e If you look at the timelines side by side, you can see the problem 427\u003cbr\u003e Double click slowly and there is no problem 428\u003cbr\u003e Double clicking quickly gives incorrect results 429\u003cbr\u003e Timelines that share resources can be problematic 430\u003cbr\u003e Converting global variables to local variables 431\u003cbr\u003e Converting global variables to arguments 432 \u003cbr\u003eMaking Code More Reusable 435\u003cbr\u003e Principle: Callbacks can be used instead of return values ​​for explicit output in asynchronous calls 436\u003cbr\u003e Conclusion 440\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 16 Sharing Resources Between Timelines 441\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e Principles of a Good Timeline 442\u003cbr\u003e There is still a bug in the cart 443\u003cbr\u003e We must ensure the order in which the DOM is updated 445\u003cbr\u003e Creating a Queue in JavaScript 447\u003cbr\u003e Principle: Inspiring Reality in How to Share 455\u003cbr\u003e Making Queues Reusable 456\u003cbr\u003e Analyzing the Timeline Created So Far 461\u003cbr\u003e Rule: If you think there's a problem, look at the timeline diagram. 464\u003cbr\u003e Make the queue skip 465\u003cbr\u003e Conclusion 469\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 17: Tune Your Timeline 471\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e Principles of a Good Timeline 472\u003cbr\u003e There's a bug! 473\u003cbr\u003e How did the code change? 475\u003cbr\u003e Check the action: Step 1 476\u003cbr\u003e Drawing All Actions: Step 2 477\u003cbr\u003e Simplifying the Diagram: Step 3 481 \u003cbr\u003eAnalyzing the Executable Sequence 483\u003cbr\u003e Why is the timeline faster now? 484\u003cbr\u003e Wait for all parallel callbacks 486\u003cbr\u003e Concurrency primitives for dividing timelines 487\u003cbr\u003e Applying Cut() to Code 489\u003cbr\u003e Analyzing Uncertain Orders 491\u003cbr\u003e Parallel Execution Analysis 492\u003cbr\u003e Analysis 493 when clicking multiple times\u003cbr\u003e Basic 500, called only once\u003cbr\u003e Implicit vs. Explicit Time Models 502\u003cbr\u003e Summary: Using the Timeline 507\u003cbr\u003e Conclusion 508\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 18 Reactive Architecture and Onion Architecture 509\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e The two architectural patterns are independent 510\u003cbr\u003e Strongly linked cause and effect for change 511\u003cbr\u003e What is reactive architecture? 512\u003cbr\u003e Tradeoffs in Responsive Architecture 513\u003cbr\u003e Cell is in first class condition 514\u003cbr\u003e You can make ValueCell responsive 515\u003cbr\u003e You can update the shipping icon when the cell changes 516\u003cbr\u003e FormulaCell calculates derived values ​​517\u003cbr\u003e Functional Programming and Mutable State 518 \u003cbr\u003eHow Reactive Architecture Changed Systems 519\u003cbr\u003e Separate the combination of cause and effect 520\u003cbr\u003e The separation of union governs the center of cause and effect 521\u003cbr\u003e Process multiple steps in a pipeline 522\u003cbr\u003e The timeline becomes more flexible 523\u003cbr\u003e Another architectural pattern 526\u003cbr\u003e What is Onion Architecture? 527\u003cbr\u003e Revisit: Actions and Calculations, Data 528\u003cbr\u003e Revisit: Hierarchical Design 529\u003cbr\u003e Traditional hierarchical architecture 530\u003cbr\u003e Functional Architecture 531\u003cbr\u003e It should be easy to change and reuse 532\u003cbr\u003e Domain rules use domain terms 535\u003cbr\u003e Readability should be considered 536\u003cbr\u003e Conclusion 539\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 19: Before Your Functional Programming Journey 541\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e Final Chapter Plan 542\u003cbr\u003e I learned the skills of an expert 543\u003cbr\u003e 544 Things to Remember\u003cbr\u003e Changes in Skills and Passions Over Time 545\u003cbr\u003e Becoming a Master with Two Tracks 546\u003cbr\u003e Sandbox: Start a Side Project 547\u003cbr\u003e Sandbox: Training with Practice Problems 548 \u003cbr\u003eProduct: Get rid of bugs today 549\u003cbr\u003e Product: Improve Your Design One Step at a Time 549\u003cbr\u003e 550 Popular Functional Programming Languages\u003cbr\u003e The functional language with the most jobs (552)\u003cbr\u003e 552 functional languages ​​available on various platforms\u003cbr\u003e 553 Functional Languages, Divided by What You Can Learn\u003cbr\u003e Gaining Mathematical Knowledge 554\u003cbr\u003e Further Reading 555\u003cbr\u003e Conclusion 556\u003cbr\u003e\u003cbr\u003e Search 557\u003c\/div\u003e\n\u003cdiv\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cbr\u003e\u003cdiv\u003e\u003ch5\u003e \u003cb\u003eDetailed image\u003c\/b\u003e \u003c\/h5\u003e\u003c\/div\u003e\n\u003cdiv\u003e\u003cdiv\u003e\u003cimg src=\"https:\/\/image.yes24.com\/momo\/TopCate3807\/MidCate002\/380613007.jpg\" border=\"0\" alt=\"Detailed Image 1\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n\u003cbr\u003e\u003cdiv\u003e\u003ch5\u003e \u003cb\u003eInto the book\u003c\/b\u003e\n\u003c\/h5\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e Many developers wonder what functional programming is and when it would be a good idea to use it.\u003cbr\u003e It's hard to pinpoint where functional programming fits in.\u003cbr\u003e Functional programming is a general-purpose programming paradigm, so it can be used anywhere.\u003cbr\u003e But as you read this book, you'll find places where functional programming fits better.\u003cbr\u003e\u003cbr\u003e --- p.2\u003cbr\u003e\u003cbr\u003e In the future, you will learn various techniques of functional programming. \u003cbr\u003eBefore we can do that, we need to be able to distinguish between actions, calculations, and data.\u003cbr\u003e Since this is the foundation for all other techniques, once you learn it, you can easily learn other techniques of functional programming.\u003cbr\u003e\u003cbr\u003e --- p.30\u003cbr\u003e\u003cbr\u003e Hierarchical design is a technique for organizing software into layers.\u003cbr\u003e Functions in each layer are defined using functions in the layer immediately below.\u003cbr\u003e Developing a design sense will help you understand the hierarchy that makes your software easier to fix, read, test, and reuse.\u003cbr\u003e --- p.169\u003cbr\u003e\u003cbr\u003e Let's find something that isn't first class and turn it into first class.\u003cbr\u003e Doing so will give you new problem-solving skills.\u003cbr\u003e The skill of turning it into a first-class thing is important in functional programming.\u003cbr\u003e Starting with this technique, you will be able to learn more sophisticated techniques of functional programming patterns.\u003cbr\u003e --- p.240\u003cbr\u003e \u003cbr\u003eLet's learn about timeline diagrams to represent the sequence of actions that are executed over time.\u003cbr\u003e Timeline diagrams help you understand how software works.\u003cbr\u003e It is especially useful for understanding distributed systems, such as communication between web servers and clients.\u003cbr\u003e You can also diagnose and predict bugs with a timeline diagram.\u003cbr\u003e And you can create code that solves the problem.\u003cbr\u003e\n\n\u003c\/div\u003e\n\u003cdiv\u003e --- p.391\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cbr\u003e\u003cdiv\u003e\u003ch5\u003e \u003cb\u003ePublisher's Review\u003c\/b\u003e\n\u003c\/h5\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e \u003cb\u003eHow do functional developers think and write code?\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e Functional programming is a new way of programming that is different from procedural programming and object-oriented programming.\u003cbr\u003e So learning functional programming means learning a new way of thinking.\u003cbr\u003e So how do functional developers think and create software? \u003cbr\u003eThis book begins by covering side effects, the most fundamental aspect of functional programming.\u003cbr\u003e First, we'll learn how to distinguish between actions (functions with side effects) and computations (computations without side effects). After distinguishing between the two, we'll discuss how to reduce actions with side effects and what techniques exist for turning actions into computations.\u003cbr\u003e Next, we will learn the concept of first-class functions and explain how to reduce loops using higher-order functions.\u003cbr\u003e Learning this will allow you to reuse functional units of code and make testing easier.\u003cbr\u003e This process is explained step by step so that you can easily understand and follow how to apply what you have learned in theory.\u003cbr\u003e\u003cbr\u003e The example code used in this book is written in JavaScript. \u003cbr\u003eJavaScript isn't a perfect functional language, but it lacks the features of functional languages, making it a good language for demonstrating functional thinking.\u003cbr\u003e It explains functional concepts in more depth by creating insufficient functional functions yourself.\u003cbr\u003e This book tells the story by creating realistic cases.\u003cbr\u003e It is structured to be fun and engaging, as if you were part of a company's development team.\u003cbr\u003e By joining the development team, you can observe firsthand how functional developers think about creating software.\u003cbr\u003e Even if you don't use a functional language or aren't interested in functional programming, learning functional thinking will help you develop problem-solving skills through a new way of thinking. \u003cbr\u003eI recommend this book to readers who want to learn functional programming, as well as to all developers who want to make their programming a little more concise and clean.\u003cbr\u003e\u003cbr\u003e \u003cb\u003eTarget audience\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e ■ Professionals with 2 to 5 years of software development experience\u003cbr\u003e ■ Developers who are creating simple systems but have difficulty handling large systems \u003c\/div\u003e\n\u003cdiv\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c\/div\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003cdiv style=\"width:95%;padding-top:20px;padding-bottom:20px\"\u003e\n\n\u003cdiv style=\"text-align:left;font-size:16px;font-weight:bold;padding-bottom:20px\"\u003e GOODS SPECIFICS \u003c\/div\u003e\n\n\u003cdiv style=\"text-align:left;font-size:14px;line-height:1.6em;\"\u003e\n\n\u003cdiv style=\"width:100%;margin-bottom:5px;line-height:1.6em;font-size:14px\"\u003e - \u003cstrong\u003ePublication date:\u003c\/strong\u003e April 22, 2022\u003c\/div\u003e\n\n\u003cdiv style=\"width:100%;margin-bottom:5px;line-height:1.6em;font-size:14px\"\u003e - \u003cstrong\u003ePage count, weight, size:\u003c\/strong\u003e 596 pages | 1,124g | 170*225*28mm\u003c\/div\u003e\n\n\u003cdiv style=\"width:100%;margin-bottom:5px;line-height:1.6em;font-size:14px\"\u003e - \u003cstrong\u003eISBN13:\u003c\/strong\u003e 9791191600759\u003c\/div\u003e\n\n\u003cdiv style=\"width:100%;margin-bottom:5px;line-height:1.6em;font-size:14px\"\u003e - \u003cstrong\u003eISBN10:\u003c\/strong\u003e 1191600750 \u003c\/div\u003e\n\n\n\u003c\/div\u003e\n\n\n\u003c\/div\u003e\n\n\n\u003c\/div\u003e\n\n\u003ccenter\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003cspan\u003e\u003c\/span\u003e\n\n\u003c\/center\u003e\n\n\n\u003c\/center\u003e","brand":"LIBRAIRIE COREENNE","offers":[{"title":"Default Title","offer_id":43893444476970,"sku":"154714","price":49.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0683\/2750\/5962\/files\/6566a8e668ea2389f8ebaa424c9b36c1.jpg?v=1765402427","url":"https:\/\/librairie.coreenne.fr\/en\/products\/154714","provider":"LIBRAIRIE COREENNE","version":"1.0","type":"link"}