सभी कार्यात्मक प्रोग्रामिंग डिजाइन पैटर्न कहां हैं? [बन्द है]


75

OO प्रोग्रामिंग साहित्य डिजाइन पैटर्न से भरा है। ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग पर अधिकांश पुस्तकें कारखानों और सज्जाकार जैसे पैटर्न डिजाइन करने के लिए एक या दो अध्याय समर्पित करती हैं। तो कार्यात्मक भाषाओं में समान पैटर्न क्या हैं और किसी ने उनके बारे में अभी तक कोई पुस्तक क्यों नहीं लिखी है? क्या कार्यात्मक भाषाओं के बारे में कुछ खास है जो डिजाइन पैटर्न की आवश्यकता को कम करता है?


6
निश्चित रूप से कार्यात्मक डिजाइन पैटर्न हैं - उदाहरण के लिए संस्मरण या मोनाड्स लें - मुझे भी आश्चर्य हो रहा है कि क्या किसी ने उन्हें एक स्थान पर इकट्ठा किया है, हालांकि ...
फिन जेक

2
फिननेक मोनाड एक प्रकार के वर्ग से अधिक एक डिजाइन पैटर्न ^ _ ^
वैकल्पिक



1
नक्शा कम करना एक है। मैं निराश हूं कि पैटर्न की एक अच्छी सूची नहीं है
श्रीधर सरनोबत

जवाबों:


47

OO और फ़ंक्शनल प्रोग्रामिंग दो बहुत अलग प्रोग्रामिंग प्रतिमान हैं, और डिज़ाइन पैटर्न (DP) OO डिज़ाइन और प्रोग्रामिंग का एक महत्वपूर्ण हिस्सा है। डीपी की कार्यात्मक प्रोग्रामिंग में ऐसी भूमिका नहीं है।

एक भी कह सकता है कि कार्यात्मक प्रोग्रामिंग में डीपी की आवश्यकता नहीं है - कोई खुजली नहीं है जो डीपी के लिए ठीक है।

  • कोई यह तर्क दे सकता है कि डिज़ाइन पैटर्न एक प्रोग्रामिंग भाषा में लापता सुविधाओं का संकेत है ।

  • पीटर नॉर्विग ने पाया कि डिजाइन पैटर्न पुस्तक में 23 में से 16 पैटर्न लिस्प या डायलन में " या तो अदृश्य या सरल आर" हैं।

  • "कई पैटर्न ऑब्जेक्ट-ओरिएंटेशन या अधिक सामान्यतः उत्परिवर्तनीय स्थिति का संकेत देते हैं, और इसलिए यह कार्यात्मक प्रोग्रामिंग भाषाओं में लागू नहीं हो सकता है, जिसमें डेटा अपरिवर्तनीय या इस तरह के रूप में व्यवहार किया जाता है।" - http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29


41
मुझे यकीन नहीं है कि मैं सहमत हूं कि डिजाइन पैटर्न एफपी पर लागू नहीं होते हैं। एफपी अभी भी आम समस्याओं को प्रस्तुत करता है जो विशेष रूप से, सामान्य तरीकों से हल हो जाते हैं। OO में हल करने वालों को विभिन्न समस्याएं, लेकिन फिर भी समस्याएं। मुझे लगता है कि यह शायद सिर्फ कुछ है जो ओओ की तुलना में बहुत कम ध्यान दिया गया है, क्योंकि एफपी इस समय वाणिज्यिक दुनिया में कम आम है।
d11wtq

22
यह दावा करने के लिए कि कार्यात्मक प्रोग्रामिंग में डिज़ाइन पैटर्न मौजूद नहीं है गलत सूचना है। सबसे आसान काउंटर-उदाहरण मोनड है। आपको कार्यात्मक प्रोग्रामिंग में मोनाद का उपयोग करने की आवश्यकता नहीं है, लेकिन यह एक बहुत ही सामान्य पैटर्न है जो लोग शुद्ध फ़ंक्शन प्रोग्रामिंग के आवेदन की सुविधा के लिए करते हैं। संक्षेप में डिजाइन पैटर्न की परिभाषा है।
voidvector

3
डिज़ाइन पैटर्न सभी डिज़ाइन गतिविधि पर लागू होते हैं, चाहे प्रोग्रामिंग या घर का डिज़ाइन। वास्तव में, पैटर्न भाषाओं की बहुत अवधारणाएं वास्तुकला से आती हैं: en.wikipedia.org/wiki/A_Pattern_Language
BobDalgleish

2
हम्म। अवलोकनीय धाराएँ, रेलवे मान्यता, और नरक, बहुत ज्यादा हर मोनाड एक डिजाइन पैटर्न है, है ना?
चेट

2
@voidvector मोनाड्स केवल एक डिज़ाइन पैटर्न नहीं हैं। एफपी में, मोनड्स का उपयोग टाइप सिस्टम के बीच फंक्शनलर्स के रूप में किया जाता है, और अवधारणा स्वयं श्रेणी थ्योरी, गणित की एक शाखा से आती है। उनका उपयोग सामान्य रूप से एक बीजीय संरचनाओं के बीच एक विशेष प्रकार के संबंधों का वर्णन करने के लिए किया जाता है। यह कहना अधिक सटीक होगा कि प्रोग्रामिंग में गणित के उपयोग को सुविधाजनक बनाने के लिए कार्यात्मक प्रोग्रामिंग एक डिज़ाइन डेटर्न है।
जॉन क्रैमरस

67

जेरेमी गिबन्स पुस्तक लिख रहे हैं। जब तक यह खत्म नहीं हो जाता, तब तक आप उनके ब्लॉग, पैटर्न को फंक्शनल प्रोग्रामिंग में पढ़ सकते हैं । वह अपने पदों को सबसे पुराने से नवीनतम तक पढ़ने की सलाह देते हैं।

उसके प्रकाशनों को भी ब्राउज़ करें । उन्होंने डिज़ाइन पैटर्न में गैंग ऑफ़ फोर पैटर्न को उच्च-क्रम डेटाटाइप-जेनेरिक प्रोग्राम्स के रूप में शामिल किया है और ओरिगेमी प्रोग्रामिंग (सिलवटों और खुलासा) में पुनरावर्ती समीकरणों के साथ प्रोग्रामिंग के पैटर्न का वर्णन किया है ।


13

सरल तथ्य यह है कि कई ओओ पैटर्न को कार्यात्मक भाषाओं (विशेष रूप से मूल GoF पैटर्न) में मुहावरे माना जाएगा। उदाहरण के लिए Iterator पैटर्न (C # अब जैसी भाषाओं में बिल्ट-इन) केवल एक लिस्प या ML में आवश्यक नहीं है जिसमें अनुक्रम ऑपरेटर हैं।

ओओ सिस्टम में हमारे द्वारा उपयोग किए जाने वाले बहुत सारे पैटर्न हमें "गैर-आवश्यक" तरीके से बाहर निकालने में मदद करने के लिए हैं ताकि हम वस्तुओं को कोड करने पर ध्यान केंद्रित कर सकें। दूसरे शब्दों में, पैटर्न एप्लिकेशन के गैर-दिलचस्प भागों का समाधान है। हमें सामान्य आवश्यकताओं को हल करने के लिए पैटर्न का लाभ उठाना चाहिए जो पहले हल किया गया है (जैसे डेटाबेस ट्रांसमिशन, या डेटाबेस ट्रांसमिशन जैसी चीजों से निपटने के लिए एंटरप्राइज एप्लिकेशन के पैटर्न में पैटर्न, या आपकी यूनिट परीक्षण को बढ़ाने के लिए xUnit पैटर्न) ताकि हम व्यापार मूल्य जोड़ने पर ध्यान केंद्रित कर सकें। आवेदन के लिए।

मुझे यकीन है कि GoF पैटर्न की बारीकियों से परे, ऐसे डिज़ाइन पैटर्न हैं जो कार्यात्मक प्रोग्रामिंग पर भी लागू होंगे। बात यह है कि OO प्रमुख प्रतिमान है। एक पैटर्न बुक लिखना जो कार्यात्मक डेवलपर्स को लक्षित करता है ... अच्छी तरह से स्पष्ट रूप से एक प्रकाशक से ग्रीनलाइट नहीं मिलेगी। यही वह उबाल है। कार्यात्मक प्रतिमानों के लिए बाजार के लिए पर्याप्त नहीं है कि विषय के लिए समर्पित पुस्तकों की एक महत्वपूर्ण संख्या हो।


9

स्टुअर्ट सिएरा द्वारा इस विषय पर एक अच्छी बात (~ 45 मिनट):

http://www.infoq.com/presentations/Clojure-Design-Patterns

जरूरी नहीं कि बाध्यकारी और आधिकारिक हो, लेकिन मैंने डेटा विश्लेषण के लिए एफपी का उपयोग करके अपने स्वयं के अनुभव से कई उदाहरणों को मान्यता दी।

क्लोजर में लिखे गए उदाहरण, लेकिन किसी भी एफपी भाषा पर लागू होने की संभावना है। उनके द्वारा कवर किए गए पैटर्न के नाम वे हैं:

  • राज्य / इवेंट
  • परिणाम
  • बिजली संचयक यंत्र
  • कम करें / कम्बाइन
  • पुनरावर्ती विस्तार
  • पाइपलाइन
  • आवरण
  • टोकन
  • देखने वाला
  • रणनीति

6

यदि आप वास्तव में डिज़ाइन पैटर्न सीखने में रुचि रखते हैं तो हास्केल की तुलना में आगे नहीं देखें। यदि आप भाषा को सीखने के लिए समय निकालते हैं तो आप जिस तरह से भाग लेंगे और अधिकांश संस्थापक पैटर्न के साथ सहज हो जाएंगे - वे भाषा में पके हुए हैं।

भिक्षुओं पर मत छोड़ो। वहाँ लंबी-लंबी व्याख्याओं का एक समूह होता है और इसमें विचारों को डूबने के लिए कुछ करना होता है, लेकिन अगर आप इसे दूर रखना चाहते हैं, तो अंततः यह आप पर फिदा हो जाएगा और आप कितने डिजाइन पैटर्न हो सकते हैं और आप चकित रह जाएंगे इस एक अमूर्त / इंटरफ़ेस के शीर्ष पर बनाएँ।

एक बार जब आप हास्केल को ग्रो कर लेते हैं, तो आपके पास खतरनाक होने के लिए अपने निपटान में पर्याप्त एफपी शस्त्रागार होगा। प्वाइंट, है इसे रखना जब तक आप इसे मिलता है। यहां कोई छोटा रास्ता नहीं है।


-3

एफपी के लिए डिजाइन कार्यप्रणाली के रूप में इंसोफर अपने प्रकार को डिजाइन करने के लिए है ताकि समस्या स्थान को सही ढंग से प्रतिबिंबित किया जा सके और कार्यान्वयन को स्वचालित रूप से पालन करना चाहिए, डिजाइन पैटर्न पर एक पुस्तक के एफपी समकक्ष क्रिस ओकासाकी की विशुद्ध रूप से कार्यात्मक डेटा संरचनाओं की तरह है


1
ओकासाकी की पुस्तक कई डेटा संरचना और एल्गोरिदम पुस्तकों के डेटा संरचना भाग के बराबर है जो आमतौर पर केवल परिवर्तनशील डेटा संरचना पर विचार करते हैं।
एपीग्रामग्राम

1
मुझे नहीं लगता कि पैटर्न को डिजाइन करने के लिए डेटा संरचनाओं की बराबरी करना बिल में फिट बैठता है। यह ओओ प्रोग्रामर की तरह नहीं है, जब तक उचित वर्ग की परिभाषाएँ नहीं बन जातीं, तब तक वे अपने हथियारों को फहराते रहते हैं।
davidk01

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