Learn to apply functional programming concepts in JavaScript to make your programs more readable and less error-prone! Kyle Simpson will walk you through the core concepts of functional programming like function purity, point-free style, partial-application, currying, composition, immutability, recursion, and list operations like map/reduce/filter. You'll go even deeper with monads and transduction, two more techniques to add to your tool belt!
Overview
Syllabus
- Introduction
- Why Functional Programming
- Functional Programming Journey
- Code is Provable
- Course Overview
- Functions vs Procedures
- Function Naming Semantics
- Side Effects
- Pure Functions & Constants
- Reducing Surface Area
- Same Input, Same Output
- Level of Confidence
- Extracting Impurity
- Containing Impurity
- Impurity Exercise: Wrappers & Adapters
- Impurity Solution: Wrappers
- Impurity Solution: Adapters
- Function Arguments
- Arguments Shape Adapters
- Flip & Reverse Adapter
- Spread Adapter
- Equational Reasoning
- Point Free Refactor
- Point Free Exercise
- Point Free Solution
- Advanced Point Free
- Closure
- Closure Exercise
- Closure Solution
- Lazy vs Eager Execution
- Memoization
- Referential Transparency
- Generalized to Specialized
- Partial Application & Currying
- Partial Application & Currying Comparison
- Changing Function Shape with Curry
- Composition Illustration
- Declarative Data Flow
- Piping vs Composition
- Piping & Composition Exercise
- Piping & Composition Solution
- Associativity
- Composition with Currying
- Immutability
- Rethinking const Immutability
- Value Immutability
- Object.freeze
- Don't Mutate, Copy
- Immutable Data Structures
- Immutable.js Overview
- Immutability Exercise
- Immutability Solution
- Recursion
- Base Condition Location
- Recursion Exercise
- Recursion Solution
- Stack Frames & Memory Limits
- Optimization: Tail Calls
- Proper Tail Calls
- Refactoring to PTC Form
- Continuation-Passing Style
- Trampolines
- CPS & Trampolines Q&A
- Map: Transformation
- Filter: Inclusion
- Reduce: Combination
- Composition with Reduce
- List Operations Exercise
- List Operations Solution: add & constant
- List Operations Solution: addn
- List Operations Solution: Modify Collection
- Fusion
- Transduction
- Transduction Q&A
- Deriving Transduction: Extracting Reduce
- Deriving Transduction: Combiner & Currying
- Deriving Transduction: Single Reduce
- Derivation Summary and Q&A
- Data Structure Operations
- Object Filter & Reduce Exercise
- Object Filter & Reduce Solution
- Advanced Point Free Exercise
- Advanced Point Free Solution
- Monad Data Structures
- Just Monad
- Maybe Monad
- Monads Q&A
- Map Lazy & Lazy Array
- Observables
- Reactive Programming with Rx.js
- Async with Rx.js Exercise
- Async with Rx.js Solution
- Lodash/FP
- Ramda
- FPO
- Wrapping Up
Taught by
Kyle Simpson