Mastering JavaScript functional programming in-depth guide for writing robust and maintainable JavaScript codes in ES8 and beyond

Master Functional Programming techniques with this comprehensive guide for writing cleaner, safer, high-performing JavaScript codes About This Book Become proficient and skilled with Functional Programming in JavaScript to solve real-world development problems Successfully apply Functional Programmi...

Descripción completa

Detalles Bibliográficos
Otros Autores: Kereki, Federico, author (author)
Formato: Libro electrónico
Idioma:Inglés
Publicado: Birmingham, England ; Mumbai, [India] : Packt Publishing 2017.
Edición:1st edition
Materias:
Ver en Biblioteca Universitat Ramon Llull:https://discovery.url.edu/permalink/34CSUC_URL/1im36ta/alma991009630093406719
Tabla de Contenidos:
  • Cover
  • Title Page
  • Copyright
  • Credits
  • About the Author
  • Dedication
  • About the Reviewer
  • www.PacktPub.com
  • Customer Feedback
  • Table of Contents
  • Preface
  • Chapter 1: Becoming Functional - Several Questions
  • What is Functional Programming?
  • Theory versus practice
  • A different way of thinking
  • What Functional Programming is not
  • Why use Functional Programming?
  • What we need
  • What we get
  • Not all is gold...
  • Is JavaScript functional?
  • JavaScript as a tool
  • Going functional with JavaScript
  • Key features of JavaScript
  • Functions as First Class Objects
  • Recursion
  • Closures
  • Arrow functions
  • Spread
  • How do we work with JavaScript?
  • Using transpilers
  • Working online
  • Testing
  • Questions
  • Summary
  • Chapter 2: Thinking Functionally - A First Example
  • The problem - do something only once
  • Some bad solutions
  • Solution #1 - hope for the best!
  • Solution #2 - use a global flag
  • Solution #3 - remove the handler
  • Solution #4 - change the handle
  • Solution #5 - disable the button
  • Solution #6 - redefine the handler
  • Solution #7- use a local flag
  • A functional solution
  • A higher-order solution
  • Testing the solution manually
  • Testing the solution automatically
  • An even better solution
  • Questions
  • Summary
  • Chapter 3: Starting Out with Functions - A Core Concept
  • All about functions
  • Of lambdas and functions
  • Arrow functions - the modern way
  • Returning values
  • Handling the this value
  • Working with arguments
  • One argument or many?
  • Functions as objects
  • A React+Redux reducer
  • An unnecessary mistake
  • Working with methods
  • Using functions in FP ways
  • Injection - sorting it out
  • Callbacks, promises, and continuations
  • Continuation Passing Style
  • Polyfills
  • Detecting Ajax
  • Adding missing functions
  • Stubbing
  • Immediate invocation.
  • Questions
  • Summary
  • Chapter 4: Behaving Properly - Pure Functions
  • Pure functions
  • Referential Transparency
  • Side effects
  • Usual side effects
  • Global state
  • Inner state
  • Argument mutation
  • Troublesome functions
  • Advantages of pure functions
  • Order of execution
  • Memoization
  • Self-documentation
  • Testing
  • Impure functions
  • Avoiding impure functions
  • Avoiding the usage of state
  • Injecting impure functions
  • Is your function pure?
  • Testing - pure versus impure
  • Testing pure functions
  • Testing purified functions
  • Testing impure functions
  • Questions
  • Summary
  • Chapter 5: Programming Declaratively - A Better Style
  • Transformations
  • Reducing an array to a value
  • Summing an array
  • Calculating an average
  • Calculating several values at once
  • Folding left and right
  • Applying an operation - map
  • Extracting data from objects
  • Parsing numbers tacitly
  • Working with ranges
  • Emulating map() with reduce()
  • More general looping
  • Logical higher-order functions
  • Filtering an array
  • A reduce() example
  • Emulating filter() with reduce()
  • Searching an array
  • A special search case
  • Emulating find() and findIndex() with reduce()
  • Higher level predicates - some, every
  • Checking negatives - none
  • Questions
  • Summary
  • Chapter 6: Producing Functions - Higher-Order Functions
  • Wrapping functions
  • Logging
  • Logging in a functional way
  • Taking exceptions into account
  • Working in a more pure way
  • Timing
  • Memoizing
  • Simple memoization
  • More complex memoization
  • Memoization testing
  • Altering functions
  • Doing things once, revisited
  • Logically negating a function
  • Inverting results
  • Arity changing
  • Other higher-order functions
  • Turning operations into functions
  • Implementing operations
  • A handier implementation
  • Turning functions into promises.
  • Getting a property from an object
  • Demethodizing - turning methods into functions
  • Finding the optimum
  • Questions
  • Summary
  • Chapter 7: Transforming Functions - Currying and Partial Application
  • A bit of theory
  • Currying
  • Dealing with many parameters
  • Currying by hand
  • Currying with bind()
  • Currying with eval()
  • Partial application
  • Partial application with arrow functions
  • Partial application with eval()
  • Partial application with closures
  • Partial currying
  • Partial currying with bind()
  • Partial currying with closures
  • Final thoughts
  • Parameter order
  • Being functional
  • Questions
  • Summary
  • Chapter 8: Connecting Functions - Pipelining and Composition
  • Pipelining
  • Piping in Unix/Linux
  • Revisiting an example
  • Creating pipelines
  • Building pipelines by hand
  • Using other constructs
  • Debugging pipelines
  • Using tee
  • Tapping into a flow
  • Using a logging wrapper
  • Chaining and fluent interfaces
  • Pointfree style
  • Defining pointfree functions
  • Converting to pointfree style
  • Composing
  • Some examples of composition
  • Unary operators
  • Counting files
  • Finding unique words
  • Composing with higher order functions
  • Testing composed functions
  • Questions
  • Summary
  • Chapter 9: Designing Functions - Recursion
  • Using recursion
  • Thinking recursively
  • Decrease and Conquer: searching
  • Decrease and Conquer: doing powers
  • Divide and conquer: The Tower of Hanoi
  • Divide and conquer: sorting
  • Dynamic programming: making change
  • Higher order functions revisited
  • Mapping and filtering
  • Other higher-order functions
  • Searching and backtracking
  • The Eight Queens puzzle
  • Traversing a tree structure
  • Recursion techniques
  • Tail call optimization
  • Continuation passing style
  • Trampolines and thunks
  • Recursion elimination
  • Questions
  • Summary.
  • Chapter 10: Ensuring Purity - Immutability
  • The straightforward JS way
  • Mutator functions
  • Constants
  • Freezing
  • Cloning and mutating
  • Getters and setters
  • Getting a property
  • Setting a property by path
  • Persistent data structures
  • Working with lists
  • Updating objects
  • A final caveat
  • Questions
  • Summary
  • Chapter 11: Implementing Design Patterns - The Functional Way
  • What are Design Patterns?
  • Design pattern categories
  • Do we need design patterns?
  • Object-oriented design patterns
  • Façade and Adapter
  • Decorator or Wrapper
  • Strategy, Template, and Command
  • Other patterns
  • Functional design patterns
  • Questions
  • Summary
  • Chapter 12: Building Better Containers - Functional Data Types
  • Data types
  • Signatures for functions
  • Other type options
  • Containers
  • Extending current data types
  • Containers and functors
  • Wrapping a value: a basic container
  • Enhancing our container: functors
  • Dealing with missing values with Maybe
  • Monads
  • Adding operations
  • Handling alternatives - the Either monad
  • Calling a function - the Try monad
  • Unexpected Monads - Promises
  • Functions as data structures
  • Binary trees in Haskell
  • Functions as binary trees
  • Questions
  • Summary
  • Bibliography
  • Appendix: Answers to Questions
  • Index.