Functional Programming

  1. Foundational Concepts
    1. Functions as First-Class Citizens
      1. Assigning Functions to Variables
        1. Passing Functions as Arguments
          1. Returning Functions from Other Functions
            1. Storing Functions in Data Structures
              1. Function Equality and Identity
              2. Pure Functions
                1. Definition and Characteristics
                  1. The Problem of Side Effects
                    1. Idempotence
                      1. Determinism
                        1. Input-Output Relationships
                          1. Testing Strategies for Pure Functions
                          2. Higher-Order Functions
                            1. Definition and Usage
                              1. Common Higher-Order Functions
                                1. map
                                  1. filter
                                    1. reduce
                                      1. fold
                                        1. forEach
                                          1. find
                                            1. some
                                              1. every
                                              2. Custom Higher-Order Functions
                                                1. Function Factories
                                                  1. Callback Patterns
                                                  2. Immutability
                                                    1. Immutable Data Structures
                                                      1. Lists
                                                        1. Maps
                                                          1. Sets
                                                            1. Trees
                                                              1. Arrays
                                                              2. State and Identity
                                                                1. Advantages of Immutability
                                                                  1. Thread Safety
                                                                    1. Predictable Behavior
                                                                      1. Simplified Reasoning
                                                                      2. Implementing Immutability
                                                                        1. Copy-on-Write Strategies
                                                                          1. Structural Sharing
                                                                            1. Persistent Data Structures
                                                                          2. Expressions over Statements
                                                                            1. The Role of Evaluation
                                                                              1. Expression-Oriented Programming
                                                                                1. Everything Returns a Value
                                                                                  1. Avoiding Nulls
                                                                                    1. Option Types
                                                                                      1. Maybe Types
                                                                                        1. Safe Defaults
                                                                                          1. Null Object Pattern
                                                                                        2. Lambda Calculus
                                                                                          1. Syntax and Semantics
                                                                                            1. Role in Functional Programming
                                                                                              1. Church Encoding
                                                                                                1. Alpha Conversion
                                                                                                  1. Beta Reduction
                                                                                                    1. Eta Conversion
                                                                                                    2. Evaluation Strategies
                                                                                                      1. Eager Evaluation
                                                                                                        1. Call-by-Value
                                                                                                          1. Performance Characteristics
                                                                                                          2. Lazy Evaluation
                                                                                                            1. Call-by-Need
                                                                                                              1. Infinite Data Structures
                                                                                                                1. Performance Trade-offs
                                                                                                                2. Call-by-Name
                                                                                                                  1. Implications for Performance and Semantics