Book Image

Functional C#

Book Image

Functional C#

Overview of this book

Functional programming makes your application faster, improves performance, and increases your productivity. C# code is written at a higher level of abstraction, so that code will be closer to business requirements, abstracting away many low-level implementation details. This book bridges the language gap for C# developers by showing you how to create and consume functional constructs in C#. We also bridge the domain gap by showing how functional constructs can be applied in business scenarios. We’ll take you through lambda expressions and extension methods, and help you develop a deep understanding of the concepts and practices of LINQ and recursion in C#. By the end of the book, you will be able to write code using the best approach and will be able to perform unit testing in functional programming, changing how you write your applications and revolutionizing your projects.
Table of Contents (19 chapters)
Functional C#
Credits
About the Author
Acknowledgments
About the Reviewer
www.PacktPub.com
Customer Feedback
Preface

Summary


Pattern matching is a form of dispatch to choose the correct variant of functions to be called. In other words, its concept is close to the if conditional expression because we have to decide the correct selection by providing specific input. The matching process can be simplified to make it implement a functional approach. We discussed the switch case and then refactored it using LINQ so it became functional.

We learned the definition of monad itself: a type that uses the Monad pattern, which is a design pattern for types. In C#, there are some types that have implemented Monad naturally; they are Nullable<T>, IEnumerable<T>, Func<T>, Lazy<T>, and Task<T>.

For now, we have enough knowledge about functional programming in C#. In the next chapter, we will use everything you learned in this and previous chapters to develop an application that implements a functional approach. In the upcoming chapter, we will transform imperative code into functional code...