निष्पक्ष चेतावनी, मैं कार्यात्मक प्रोग्रामिंग के लिए नया हूं इसलिए मैं कई बुरी धारणाओं को पकड़ सकता हूं।
मैं बीजगणितीय प्रकारों के बारे में सीख रहा हूं। कई कार्यात्मक भाषाएं उन्हें लगती हैं, और वे पैटर्न मिलान के साथ संयोजन में काफी उपयोगी हैं। हालांकि, वे वास्तव में किस समस्या का समाधान करते हैं? मैं इस तरह सी # में एक प्रतीत होता है (की तरह) बीजीय प्रकार लागू कर सकते हैं:
public abstract class Option { }
public class None : Option { }
public class Some<T> : Option
{
public T Value { get; set; }
}
var result = GetSomeValue();
if(result is None)
{
}
else
{
}
लेकिन मुझे लगता है कि अधिकांश सहमत होंगे कि यह ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग का कमी है, और आपको कभी ऐसा नहीं करना चाहिए। तो क्या कार्यात्मक प्रोग्रामिंग सिर्फ एक क्लीनर सिंटैक्स जोड़ती है जो प्रोग्रामिंग की इस शैली को कम सकल लगता है? मैं और क्या भुल रहा हूं?
class ThirdOption : Option{}
और आपको वह स्थान देता है new ThirdOption()
जहां आप उम्मीद करते थे Some
या None
?
data Maybe a = Just a | Nothing
( data Option a = Some a | None
आपके उदाहरण में समतुल्य ): आप तीसरे केस पोस्ट-हॉक को नहीं जोड़ सकते। जब आप अपने दिखाए गए तरीके से C # में इम प्रकार का अनुकरण कर सकते हैं, तो यह सबसे सुंदर नहीं है।