कार्यात्मक डिजाइन पैटर्न [बंद]


106

बहुत सारे कार्यात्मक मुहावरे हैं: मोनड्स, ऐप्लिकेशंस, एरो इत्यादि। वे विभिन्न लेखों में प्रलेखित हैं, लेकिन दुर्भाग्य से मुझे कोई पुस्तक या लेख नहीं पता है कि वे एक जगह पर संक्षेप में कहाँ हैं (वहाँ टाइपराइक्लोपीडिया है लेकिन इसमें बहुत कुछ है उन क्षेत्रों के बारे में जो अच्छी तरह से कवर नहीं किए गए हैं)। क्या कोई एक लेख / पुस्तक की सिफारिश कर सकता है जो उन्हें एक जगह अच्छी तरह से कवर करता है और जो एफपी में मध्यवर्ती कौशल के साथ एक प्रोग्रामर के लिए सुलभ हो सकता है?


यह सीधे आपके प्रश्न का उत्तर नहीं है, लेकिन यह अन्य सवाल में कुछ रोचक जानकारी (एक लिंक या दो और कम से कम) है: stackoverflow.com/questions/327955/...
रूबेन

15
क्या आप उन क्षेत्रों पर विस्तार कर सकते हैं जिन्हें आप महसूस करते हैं कि टाइपकास्टोपेडिया अच्छी तरह से कवर नहीं करता है?
dave4420

2
@ dave4420 यदि मैं शुरू से अंत तक टाइपकास्टोपेडिया पढ़ता हूं, तो जितना अधिक मैं पढ़ता हूं, उतना ही कम मैं समझता हूं। पहले खंड वास्तव में अच्छे हैं लेकिन बाद के खंड मेरे लिए शायद ही पठनीय हैं।
कॉन्सटेंटिन सोलोमेटोव

3
@KonstantinSolomatov यह हो सकता है कि आपको उन अनुभागों पर शोध करने की आवश्यकता होगी जो आपको समझ में नहीं आते हैं, ब्लॉग पोस्ट देखें, और कोड को कठिन देखें। इन सभी "डिजाइन पैटर्न" में टाइपकास्टोपेडिया वास्तव में अमूर्त हैं, और अक्सर गहरे होते हैं, जो कभी-कभी डूबने में थोड़ा समय लेते हैं।
jberryman

1
@DanBurton को यकीन नहीं है कि आप मेरी टिप्पणी को गलत ठहराते हैं, लेकिन मैं उन सभी को गहरे अमूर्त के रूप में वर्गीकृत करूंगा, हालांकि यह भूलना आसान है कि जब आप अपनी "आह हा!" पल।
jberryman

जवाबों:


35

मेरा सुझाव है, यदि आप स्काला को सीखना चाहते हैं, तो पॉल चिसानो और रनर बजरसन से पुस्तक पढ़ने के लिए:

http://manning.com/bjarnason/

भाग II: कार्यात्मक डिजाइन और दहनशील पुस्तकालय

  1. छोटी भाषाएँ बनाना
  2. JSON क्रमांकन
  3. विशिष्टता-आधारित परीक्षण
  4. पारसर्स
  5. विशुद्ध रूप से कार्यात्मक समानता
  6. विशुद्ध रूप से कार्यात्मक अवस्था

भाग III: कार्यात्मक डिजाइन पैटर्न

  1. अमूर्तन के लिए मामला
  2. Monoids
  3. functors
  4. monads
  5. एप्लाइड फंक्शनलर्स
  6. ट्रैवर्सेबल और फोल्डेबल डेटा स्ट्रक्चर
  7. Comonads

भाग IV: नियमों को तोड़ना: प्रभाव और I / O

  1. प्रभाव बनाम दुष्प्रभाव
  2. स्ट्रीम प्रसंस्करण और वृद्धिशील I / O
  3. प्रकार प्रणाली के साथ प्रभाव-स्कूपिंग लागू करना

31

मुझे खेद है कि मुझे उन लेखों या पुस्तकों की जानकारी नहीं है जो उन सभी निर्माणों के लिए अलग-अलग उपयोगों को विस्तार से कवर करते हैं, लेकिन मैं आपको व्यक्तिगत संसाधनों के लिए कुछ लिंक दे सकता हूं।

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

में असली दुनिया हास्केल monads के बारे में कुछ अध्यायों देखते हैं। में अध्याय 14. monads लेखकों मूल बातें और कुछ सामान्य उपयोगों (शायद, सूची, राज्य) की व्याख्या। अध्याय 15. मोनैड्स के साथ प्रोग्रामिंग उन्हें प्रभावी रूप से उपयोग करने के तरीके के बारे में अधिक स्पष्टीकरण प्रदान करता है (यह पाठक मोनड को भी कवर करता है)। निम्नलिखित अध्याय में बताया गया है कि पार्सेक का उपयोग कैसे किया जाता है , लेकिन यह लेख को कवर करने के लिए खोज करना अधिक दिलचस्प हो सकता है कि यह वास्तव में कैसे काम करता है: यह पार्सिंग के लिए भिक्षुओं के एक सुव्यवस्थित उपयोग का वास्तव में अच्छा उदाहरण होना चाहिए। मंगेतर, अध्याय 18. मोनाड ट्रांसफार्मरयह बताता है कि मोनाड ट्रांसफॉर्मर कैसे काम करता है और फिर दिखाता है कि कैसे एक का निर्माण करना है, चरण दर चरण। अध्याय के अंतिम खंडों के प्रति विचार भी दिलचस्प हैं।

मैं एक बार साधुओं के रचनात्मक उपयोग के बारे में SO पर एक बहुत दिलचस्प सवाल पढ़ता हूं । प्रस्तावित लिंक भयानक थे विषय के बारे में पढ़ता है। उस भावना के साथ, मैंने तीरों के लिए भी ऐसा ही पूछने की कोशिश की : मुझे निश्चित रूप से साधुओं पर एक से भी कम जवाब मिले, लेकिन फिर भी दिलचस्प हैं।


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

  1. कार्यात्मक सोच: कार्यात्मक डिजाइन पैटर्न, भाग 1 । यहां वे कारखानों, टेम्पलेट विधियों, रणनीति, फ्लाईवेट को कवर करते हैं। लब्बोलुआब यह है कि प्रथम श्रेणी के मूल्यों के रूप में कार्य करने से, सब कुछ बहुत सरल है।
  2. कार्यात्मक सोच: कार्यात्मक डिजाइन पैटर्न, भाग 2 । यह जावा और ग्रूवी के बारे में है । यह एडेप्टर पैटर्न को स्वीकार करता है।
  3. कार्यात्मक सोच: कार्यात्मक डिजाइन पैटर्न, भाग 3 । यहां वे दुभाषिया पैटर्न के बारे में बात करते हैं। फिर, लक्ष्य भाषा groovy है।

सबसे प्रासंगिक लेख wrt आपका प्रश्न पहले एक के लिए निश्चित है, लेकिन अन्य दो दिलचस्प संबंधित रीडिंग हो सकते हैं।


धन्यवाद, लेकिन मेरा मतलब है कि विभिन्न प्रकार के पैटर्न, जैसे मोनाड, एरो, ऐप्लिकेटिव नो गोफ पैटर्न।
कॉन्स्टेंटिन सोलोमेटोव

@KonstantinSolomatov: मुझे आपका प्रश्न गलत लगा, क्षमा करें। मैंने भिक्षुओं और तीरों के लिए कुछ संदर्भ जोड़े।
रिकार्डो टी।

18

जेरेमी गिबन्स का एफपी ब्लॉग में एक पैटर्न है जो अंततः आपके द्वारा पूछी जाने वाली पुस्तक के लिए बहुत अधिक किस्मत में है। बेशक, यह अभी तक एक स्थिति में उतना उपयोगी नहीं है जितना आप अभी चाहते हैं, लेकिन वह कुछ प्रोत्साहन के हकदार हैं!

इस बीच, मैं ब्रेंट यॉर्गी के टाइपेकेलोपेडिया के लिए +1 कहूंगा। यह वास्तव में उपयोगी है, और अगर बाद के हिस्से हैं जो भ्रमित करते हैं, तो यह साइट उनके नीचे तक पहुंचने के लिए एक अच्छी जगह है। मुझे पता है कि ब्रेंट इसकी समीक्षा के तहत रखता है। यदि वह अपने पाठकों तक नहीं पहुंच रहा है, तो उसे कुछ मदद दें।



5

क्या आपने ग्रेट गुड के लिए लर्न यू हास्केल के बाद के अध्यायों को पढ़ा है ?

  • अध्याय 6 में नक्शे और सिलवटों को शामिल किया गया है, जो कार्यात्मक भाषाओं में दो अधिक महत्वपूर्ण "डिज़ाइन पैटर्न" हैं।

  • उस क्रम में चैप्टर 11-13 फ़नवेक्टर, एपेक्टिव फ़ंक्टर और मोनाड को कवर करते हैं। यह मददगार है - कई ट्यूटोरियल फ़नवेर्स और फिर मोनाड्स का परिचय देते हैं, और फिर आख़िर में एपेक्टिव फ़नसर्स से निपटते हैं (यदि वे इसे कवर करते हैं)। LYAH में ऑर्डर बेहतर है, क्योंकि Functors => से चल रहा है Fun Functors => Monads आपको धीरे-धीरे सामान्यता और शक्ति की सीढ़ी पर ले जाता है।

  • अध्याय 14 में Zippers शामिल हैं - आप प्रभावी रूप से डेटा के एक विशिष्ट टुकड़े के लिए एक पॉइंटर के साथ कंटेनर कक्षाओं के रूप में सोच सकते हैं, जिसका अर्थ है कि आपको ओ (1) एक्सेस मिलता है और पॉइंटर स्थान पर अपडेट होता है।

यह एरो या कोमोनैड को कवर नहीं करता है, जो हास्केल में एक अधिक उन्नत विषय है। यह समझने के लिए कि कैसे और क्यों तीर या कोमोनॉड्स का उपयोग करना चाहिए, आपके पास निश्चित रूप से पहले से ही मोनाड्स का एक फर्म होना चाहिए, इसलिए मुझे नहीं लगता कि यह एक समस्या है - LYAH का उद्देश्य हास्केल बाजार के शुरुआती छोर पर है।


1
हां, मैंने किताब पढ़ी। मुझे यह बेहद पसंद आया। दुर्भाग्य से यह तीर और कई अन्य उन्नत पैटर्न को कवर नहीं करता है। मैं मोनाड्स और एप्लिकेशंस के बारे में और अधिक पढ़ना चाहता हूं (उदाहरण के लिए, LYHGG निरंतरता मोनड को कवर नहीं करता है)।
कॉन्सटेंटिन सोलोमेटोव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.