Functional Programming with C#: Create More Supportable, Robust, and Testable Code

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

After decades of relative obscurity, functional programming is finally coming into its own. With concise, easy-to-read code that supports asynchronous, concurrent processing, aspects of functional programming have begun to appear in several traditionally object-oriented languages such as C# and Java. This practical book shows C# programmers how to use functional programming features without having to navigate an entirely new language.

Because of the shared runtime environment common to C# and F# languages, it's possible to use most of F#'s functional features in C# as well. Author Simon J. Painter explains how you can write functional code in C# right away, without having to install dependencies or features newer than .NET 3. You'll learn why functional programming concepts can bring immediate benefit to your work.

  • Learn what functional programming is and how it originated
  • Discover features of the functional paradigm using a more familiar...
  • Author(s): Simon J. Painter
    Publisher: O'Reilly Media
    Year: 2023

    Language: English
    Pages: 325

    Preface
    Who Should Read This Book?
    Why I Wrote This Book
    Navigating This Book
    Conventions Used in This Book
    Using Code Examples
    O’Reilly Online Learning
    How to Contact Us
    Acknowledgments
    1. Introduction
    What Is Functional Programming?
    Is It a Language, an API, or What?
    The Properties of Functional Programming
    Immutability
    Higher-order functions
    Expressions rather than statements
    Expression-based programming
    Referential transparency
    Recursion
    Seriously, recursion
    Pattern matching
    Stateless
    Baking Cakes
    An Imperative Cake
    A Declarative Cake
    Where Does Functional Programming Come From?
    Who Else Does Functional Programming?
    Pure Functional Languages
    Is It Worth Learning a Pure Functional Language First?
    What About F#? Should I Be Learning F#?
    Multiparadigm Languages
    The Benefits of Functional Programming
    Concise
    Testable
    Robust
    Predictable
    Better Support for Concurrency
    Reduced Code Noise
    The Best Places to Use Functional Programming
    Where You Should Consider Using Other Paradigms
    How Far Can We Take This?
    Monads Actually, Don’t Worry About This Yet
    Summary
    I. What Are We Already Doing?
    2. What Can We Do Already?
    Getting Started
    Writing Your First Functional Code
    A Nonfunctional Film Query
    A Functional Film Query
    Focusing on Results-Oriented Programming
    Understanding Enumerables
    Preferring Expressions to Statements
    The Humble Select
    Iterator value is required
    No starting array
    Many to One: The Subtle Art of Aggregation
    Customized Iteration Behavior
    Making Your Code Immutable
    Putting It All Together: A Complete Functional Flow
    Taking It Further: Develop Your Functional Skills
    Summary
    3. Functional Coding in C# 7 and Beyond
    Tuples
    Pattern Matching
    Procedural Bank Accounts
    Pattern Matching in C# 7
    Pattern Matching in C# 8
    Pattern Matching in C# 9
    Pattern Matching in C# 10
    Pattern Matching in C# 11
    Read-Only Structs
    Init-Only Setters
    Record Types
    Nullable Reference Types
    The Future
    Discriminated Unions
    Active Patterns
    Summary
    4. Work Smart, Not Hard with Functional Code
    It’s Time to Get Func-y
    Funcs in Enumerables
    A Super-Simple Validator
    Pattern Matching for Old Versions of C#
    Make Dictionaries More Useful
    Parsing Values
    Custom Enumerations
    Query Adjacent Elements
    Iterate Until a Condition Is Met
    Summary
    II. Into the Belly of the Functional
    5. Higher-Order Functions
    A Problem Report
    Thunks
    Chaining Functions
    Fork Combinator
    Alt Combinator
    Compose
    Transduce
    Tap
    Try/Catch
    Handling Nulls
    Update an Enumerable
    Summary
    6. Discriminated Unions
    Holiday Time
    Holidays with Discriminated Unions
    Schrödinger’s Union
    Naming Conventions
    Database Lookup
    Sending Email
    Console Input
    Generic Unions
    Maybe
    Result
    Maybe Versus Result
    Either
    Summary
    7. Functional Flow
    Maybe, Revisited
    Maybe and Debugging
    Map() Versus Bind()
    Maybe and the Primitives
    Maybe and Logging
    Maybe and Async
    Nested Maybes
    The Laws
    Left Identity Law
    Right Identity Law
    Associativity Law
    Reader
    State
    Maybe a State?
    Examples You’re Already Using
    Enumerable
    Task
    Other Structures
    A Worked Example
    Summary
    8. Currying and Partial Application
    Currying and Large Functions
    Currying and Higher-Order Functions
    Currying in .NET
    Partial Application
    Partial Application in .NET
    Summary
    9. Indefinite Loops
    Recursion
    Trampolining
    Custom Iterator
    Understanding the Anatomy of an Enumerator
    Implementing Custom Enumerators
    Indefinitely Looping Enumerables
    Using Indefinite Iterators
    Summary
    10. Memoization
    Bacon Numbers
    Implementing Memoization in C#
    Summary
    III. And Out the Other Side
    11. Practical Functional C#
    Functional C# and Performance
    Baseline: An Imperative Solution
    Performance Results
    Imperative baseline results
    Definite loop solutions
    Indefinite loop solutions
    Interop with F# performance
    External factors and performance
    What Does All of This Mean?
    Functional C# Concerns and Questions
    How Functional Should I Make My Codebase?
    How Should I Structure a Functional C# Solution?
    How Do I Share My Functional Methods Among Applications?
    Did You Order This Pizza?
    How Do I Convince My Teammates to Do This Too?
    Is It Worth Including F# Projects in My Solution?
    Will Functional Coding Solve All My Problems?
    Connery, Moore, or Craig?
    How Do I Think Through a Problem Functionally?
    What If There’s No Way to Make a Bit of Code as High-Performant as I’d Like with Functional-Style Code?
    Summary
    12. Existing Functional Programming Libraries in NuGet
    OneOf
    LanguageExt
    Option
    Either
    Memoization
    Reader
    State
    LanguageExt Wrap-up
    Functional.Maybe
    CSharpFunctionalExtensions
    Maybe
    Result
    Fluent Assertions
    CSharpFunctionalExtensions Wrap-up
    The F# Programming Language
    Summary
    13. The Martian Trail
    Story
    Technical Detail
    Creating the Game
    The Solution
    Communications
    Want to Learn How to Play?
    The Inventory Setup
    The Game Loop
    Creating a weather report
    Choosing what to do this turn
    Updating progress
    Summary
    14. Conclusion
    What Kind of Day Has It Been?
    Where Do I Go from Here?
    More Functional C#
    Learn F#
    Pure Functional Languages
    What About You?
    Index