با ظهور LINQ، زبان #C در معرض قابل توجهی از برنامه نویسی تابعی (functional) قرار گرفت. با این حال، برنامه نویسی تابعی در سی شارپ فقط به استفاده از متدهای الحاقی، لامبداها و کلاسهای تغییر ناپذیر (Immutable) محدود نمیشود. شیوههای های زیادی وجود دارند که به این گستردگی پذیرفته نشده اند، زیرا پشتیبانی زیادی از زبان بومی برای آنها در سی شارپ وجود ندارد. هنوز هم اگر آنها را در کارهای روزمره خود بگنجانید، میتوانند بسیار سودمند باشند.
دوره ویدیویی Applying Functional Principles in C# (بکارگیری اصول تابعی در سی شارپ) موسسه Pluralsight که توسط Vladimir Khorikov تدریس شده است، اصول برنامه تابعی در سی شارپ را به شما آموزش میدهد. شما اصول اساسی پشت برنامه نویسی تابعی، دلیل مهم بودن و نحوه بکارگیری آنها را در عمل فرا خواهید گرفت. موضوعات خاصی که یاد خواهید گرفت شامل ریفکتور کردن به یک معماری تغییر ناپذیر، اجتناب از استثنا ها، وسواس primtive، نحوه کنترل شکستها و خطاهای ورودی و غیره است. با پایان این دوره، شما درک جامعتری از دلیل و چگونگی استفاده از برنامه نویسی تابعی خواهید داشت.
Table of Contents:
Course Overview
- Course Overview
Introduction
- Getting Started
- Course Outline and Prerequisites
- What Is Functional Programming?
- Why Functional Programming?
- Summary
Refactoring to an Immutable Architecture
- Introduction
- Vocabulary Used
- Why Does Immutability Matter?
- Mutability and Temporal Coupling
- Immutability Limitations
- How to Deal with Side Effects
- Example Introduction
- Mutable Implementation
- Refactoring the First Method
- Refactoring the Second Method
- Implementing a Mutable Shell
- Recap: Refactoring to an Immutable Architecture
- Summary
Refactoring Away from Exceptions
- Introduction
- Exceptions and Readability
- Use Cases for Exceptions
- Fail Fast Principle
- Where to Catch Exceptions
- The Result Class
- Recap: The Result Class
- The Result Class and CQS
- Refactoring Away from Exceptions
- Summary
Avoiding Primitive Obsession
- Introduction
- What Is Primitive Obsession?
- How to Get Rid of Primitive Obsession
- Primitive Obsession and Defensive Programming
- Primitive Obsession: Limitations
- Where to Convert Primitive Types into Value Objects?
- Refactoring Away from Primitive Obsession
- Recap: Refactoring Away from Primitive Obsession
- Summary
Avoiding Nulls with the Maybe Type
- Introduction
- The Billion-dollar Mistake
- Non-nullability on the Language Level
- Mitigating the Billion-dollar Mistake
- Enforcing the Use of the Maybe Type
- Recap: Mitigating the Billion-dollar Mistake
- Limitations
- Summary
Handling Failures and Input Errors in a Functional Way
- Introduction
- Traditional Approach to Handling Failures and Input Errors
- Refactoring the Method Using the Result and Maybe Types
- Introducing Railway-oriented Programming
- Recap: Introducing Railway-oriented Programming
- Summary
Putting It All Together
- Introduction
- Domain Model Introduction
- Application Code Introduction
- Refactoring Away from Exceptions
- Recap: Refactoring Away from Exceptions
- Refactoring Away from Primitive Obsession
- Recap: Refactoring Away from Primitive Obsession
- Refactoring to More Explicit Code
- Recap: Refactoring to More Explicit Code
- Making Nulls Explicit
- Recap: Making Nulls Explicit
- Representing Reference Data as Code
- Recap: Representing Reference Data as Code
- Railway-oriented Programming
- Recap: Railway-oriented Programming
- Module Summary
- Resource List
- Course Summary