कार्यात्मक प्रोग्रामिंग के लिए SOLID सिद्धांतों के बराबर


36

मैंने ऑब्जेक्ट-ओरिएंटेड डिज़ाइन के बारे में सोचते हुए SOLID सिद्धांतों को काफी उपयोगी पाया है ।

क्या कार्यात्मक प्रोग्रामिंग के लिए भाषा-अज्ञेय सिद्धांतों के समान / समकक्ष सेट है?


12
FWIW, इस पर संक्षेप में एक साल पहले SO पर चर्चा की गई थी
स्टुअर्टएलसी


यह वीडियो और साथ ही ये स्लाइड्स कार्यात्मक प्रोग्रामिंग के लिए लागू ठोस सिद्धांतों को प्रस्तुत करते हैं। वे दोनों क्लोजर भाषा का एक उदाहरण के रूप में उपयोग करते हैं, लेकिन सिद्धांत अन्य भाषाओं में हैं।
मसल्स


जवाबों:


14

समकक्षों को ढूंढना थोड़ा मुश्किल है लेकिन मैं कोशिश कर सकता हूं:

  • एसएफपी में (एसआरपी) एक फ़ंक्शन ALWAYS को उन्हीं तर्कों के लिए एक ही आउटपुट बनाता है जिसे संदर्भात्मक पारदर्शिता कहा जाता है
  • हे (ओसीपी) में एफपी वहाँ एक अवधारणा बीजीय डेटा प्रकार कहा जाता है, एक नज़र यह कैसे क्लास पदानुक्रम से संबंधित है और क्या समस्या है दोनों हल करने का प्रयास 1
  • एल (एलएसपी) लिसकोव प्रतिस्थापन सिद्धांत कंट्राविरेनस 2 है
  • सामान्य कार्यात्मक प्रोग्रामिंग में डी (डीआईपी) फ़ंक्शन रचना के माध्यम से अमूर्तता को प्राप्त करता है, श्रेणी सिद्धांत (उदाहरण के लिए मोनॉइड या फ़ेक्टर) की मदद से अन्य तंत्र भी हैं, "डिपेंडेंसी इंजेक्शन" 3 के लिए

21
मैं अभी भी इस बारे में सोच रहा हूं कि आपको रेफ़रेंशियल ट्रांसपेरेंसी के लिए सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल से कैसे मिला । वे दोनों असंबंधित हैं। SRP एक फ़ंक्शन के बारे में है जिसका एक ही उद्देश्य है। इस संबंध में यह संदर्भ के अनुसार पारदर्शी नहीं भी हो सकता है और न ही हो सकता है।
गोरान जोविक

3
आह, मेरी बुर - अब मुझे मिल गई। ये सिद्धांत होने और एक समान होने के अर्थ में समतुल्य हैं, न कि समान या समान चीज़ के अर्थ में। नीचे के लिए क्षमा करें!
गोरान जोकोव

1
सही है कि इसे पढ़ने का अभीष्ट तरीका है। मैंने fp के संदर्भ में उन शब्दों के लिए मानचित्रण का वर्णन करने का प्रयास किया।
एंड्रियाशेचिनर्ट

यार मुझे नफरत है कि आप एक टिप्पणी संपादित नहीं कर सकते हैं, वास्तव में चीजों का मतलब कम से कम कुछ इसी तरह का होना चाहिए।
एंड्रियाशेचेर्ट 20

हो सकता है कि उच्च-क्रम फ़ंक्शन किसी प्रकार की निर्भरता इंजेक्शन प्रदान कर सकते हैं: आप एक ठोस कार्य को एक जेनेरिक (उच्च-क्रम) फ़ंक्शन में पैरामीटर के रूप में इंजेक्ट करते हैं।
जियोर्जियो

45

SOLID कार्यात्मक / अनिवार्य लोकों के लिए भी एक अच्छा विचार है।

एसआरपी - 'केवल एक काम करो' को पहली जगह में अनिवार्य प्रोग्रामिंग से लिया गया था। छोटे, केंद्रित कार्य करना अच्छा है।

OCP - कोड को संशोधित किए बिना व्यवहार बदलने के लिए आपको अनुमति देना अच्छा है। कार्यात्मक प्रोग्रामिंग वंशानुक्रम की तुलना में अधिक क्रम कार्यों का उपयोग करता है, लेकिन सिद्धांत रखता है।

LSP - कुछ इंटरफ़ेस अनुबंध का पालन करना कार्यात्मक प्रोग्रामिंग में उतना ही अच्छा है जितना कि ऑब्जेक्ट ओरिएंटेड। यदि एक प्रकार्य फ़ंक्शन एक तुलनित्र लेता है, तो आप उम्मीद करेंगे कि '0 बराबर है, सकारात्मक परिणामों से कम, सकारात्मक परिणामों से अधिक व्यवहार'।

आईएसपी - अधिकांश कार्यात्मक भाषाओं में अभी भी संरचनाएं हैं। किसी फ़ंक्शन द्वारा आवश्यक डेटा के सबसे छोटे सेट को निर्दिष्ट करना अभी भी अच्छा अभ्यास है। डेटा के लिए कम से कम विशिष्ट इंटरफ़ेस की आवश्यकता है (क्यों टी की गणना के साथ ही इन्ट की सूची का उपयोग करें?) अभी भी अच्छा अभ्यास है।

डुबोना - कुछ फ़ंक्शन को प्राप्त करने के लिए फ़ंक्शन को हार्ड कोडिंग करने के बजाय किसी फ़ंक्शन (या उन्हें प्राप्त करने के लिए उच्चतर आदेश फ़ंक्शन) के लिए पैरामीटर निर्दिष्ट करना कार्यात्मक प्रोग्रामिंग में उतना ही अच्छा है जितना कि ऑब्जेक्ट ओरिएंटेड।

और ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग करते समय, इनमें से कई सिद्धांत वस्तुओं में तरीकों के डिजाइन पर भी लागू होते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.