अनिवार्य प्रोग्रामर को घोषित प्रोग्रामिंग सिखाने की कोशिश करते समय कुछ अच्छे अभ्यास क्या हैं?


13

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

क्या कोई इस बारे में कुछ सलाह दे सकता है कि मुझे यह कैसे करना चाहिए?

विचार

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

एफ # और घोषणात्मक प्रोग्रामिंग ?????
पी शेव्ड

@ पावेल - क्या यह एक सवाल है?
चोसपांडियन

3
@ पावेल - ठीक है, यह समझाने की परवाह करें कि आपने बयान क्यों दिया? यह दूसरी बार है जब आपने बेहद अस्पष्ट टिप्पणियां की हैं। यह बहुत असभ्य है।
ChaosPandion

3
en.wikipedia.org/wiki/Declarative_programming कार्यात्मक प्रोग्रामिंग है कथात्मक प्रोग्रामिंग का एक प्रकार है। इसके अलावा, +1, अच्छा प्रश्न।
स्वयं पर ध्यान दें -

2
@ मुझे लगता है, मेरी राय में, एफ # घोषणात्मक प्रोग्रामिंग प्रतिमान का समर्थन नहीं करता है। इसके उत्सुक मूल्यांकन और अनिवार्य विशेषताएं भाषा को महज एक सुविधाजनक, क्रियात्मक रूप प्रदान करती हैं, जो आपके द्वारा उपयोग किए जाने वाले समान कथन को दर्शाने के लिए कहती हैं, C #। चलो, यहां तक makeकि एफ # या कैमल की तुलना में एक घोषणात्मक भाषा का अधिक है! (विडंबना यह है कि इससे आपका काम आसान हो जाता है।)
P Shved

जवाबों:


5

कार्यात्मक प्रोग्रामिंग मेरे लिए एक अजीब जानवर है। मैंने एफ # और हास्केल सीखा, कुछ सरल कार्यक्रम लिखे और उनका उपयोग करके प्यार किया, लेकिन कभी "रहस्योद्घाटन का फ्लैश" नहीं था जो कुछ लोग बात करते हैं। लेकिन धीरे-धीरे, मैंने देखा कि अधिक से अधिक मैं कोड लिख रहा था, जो अपरिवर्तनीय होने के लिए था, कार्यों को और अधिक, छोटे कार्यों में तोड़ रहा था, और प्रतिनिधियों को बहुत अधिक उपयोग करने की कोशिश कर रहा था। इसकी एक बात यह है कि, यदि आप इसे पसंद करते हैं, तो आपके काम में कमी आती है क्योंकि उन तकनीकों का मूल्य स्वयं स्पष्ट है।

अब, व्यावहारिक रूप से प्रशिक्षण के लिए: मैं पाता हूं कि दो अवधारणाएं वास्तव में मेरे लिए एक शैली के रूप में कार्यात्मक प्रोग्रामिंग पर क्लिक करती हैं।

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

दूसरा, और शायद C # / ASP प्रोग्रामर के लिए अधिक उपयोगी है, यह विचार है कि FP पुनरावृत्ति और पुनरावृत्ति पर काम करता है, जबकि OOP उत्परिवर्तन और लूपिंग पर काम करता है। मैं अब एक प्रकार का एफपी के रूप में एएसपी पृष्ठ जीवनचक्र के बारे में सोचता हूं: प्रत्येक अनुरोध को पूरे जीवन-चक्र के माध्यम से खरोंच से संसाधित किया जाता है, इसलिए संपूर्ण पृष्ठ प्रभाव में होता है, एक बड़ा धीरे-धीरे होने वाला कार्यक्रम। यदि आप उस धारणा को संकुचित कर सकते हैं, तो आपको एक बेहतर विचार मिलता है कि कैसे एक अनिवार्य कार्यक्रम को उन कार्यों के छोरों के आसपास संरचित किया जा सकता है जो डेटा में लेते हैं, उस पर काम करते हैं, और पुराने को संशोधित करने के बजाय नया डेटा वापस करते हैं।

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


1

मैं सलाह दूँगा:


1

कई अनिवार्य प्रोग्रामिंग भाषाओं (Ada, C / C ++, टर्बो पास्कल, फॉक्सप्रो) में फ़ंक्शन या प्रक्रिया नाम शाब्दियों के लिए सूचक को परिभाषित करने की क्षमता है जिसका मूल्यांकन किया जा सकता है (और शाब्दिक आह्वान के बाद नामित प्रक्रियाएं)।

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

एक बार जब वह डूब जाता है, तो आप अन्य चीजों (अपरिवर्तनशीलता, शेयर-कुछ नहीं, आदि) में तल्लीन करना शुरू कर सकते हैं।


सुधार: मेरे कहने का मतलब यह है कि आप इस धारणा
luis.espinal

1

क्या कोई इस बारे में कुछ सलाह दे सकता है कि मुझे यह कैसे करना चाहिए?

ज़रूर:

  • अपने उदाहरणों को ध्यान से चुनें ताकि आपका F # कोड न केवल सुरुचिपूर्ण ढंग से एक समस्या को हल करे बल्कि C # / VB के साथ बहुत अधिक सुरुचिपूर्ण ढंग से संभव हो सके । पैटर्न मिलान और प्रकार का निष्कर्ष आपके मित्र हैं।

  • F # में मिली नई सुविधा के लाभों को उजागर करने के लिए एक उदाहरण का उपयोग करें, जैसे अतुल्यकालिक वर्कफ़्लोज़, सक्रिय पैटर्न।

  • उपयुक्त होने पर परस्पर डेटा संरचनाओं का उपयोग करके अशुद्ध उदाहरण देने से डरो मत। F # एक कारण से अशुद्ध है।

  • रामबाण के रूप में एफ # पेश न करें। उन अनुप्रयोगों का वर्णन करें जिनके लिए F # अच्छी तरह से अनुकूल नहीं है और साथ ही यह अन्य .NET भाषाओं की तुलना में बहुत बेहतर है।

  • खिलौनों के नमूने पर इंगित करें कि वे अध्ययन के साथ-साथ सफल वास्तविक दुनिया की परियोजनाएं जो एफ # (बिंग एडकेंटर, हेलो 3 आदि) का उपयोग करते हैं।

  • एफ # कैसे उन्हें आसानी से समस्याओं को हल करने में मदद कर सकता है के संदर्भ में सब कुछ समझाएं। धार्मिक वाद-विवाद से बचें। F # के बारे में सकारात्मक रहें, अन्य भाषाओं के बारे में नकारात्मक नहीं। उन्हें तथ्यों और सबूतों के साथ बांधे लेकिन उन्हें अपने निष्कर्ष निकालने दें।

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