क्या मुझे एक कार्यात्मक प्रोग्रामिंग भाषा चुननी चाहिए?


10

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

तो मुझे लगता है कि यह तो मुझे मारा। क्या मुझे इसके बजाय कार्यात्मक प्रोग्रामिंग करनी चाहिए?
संपादित करें: मेरे पास कार्यात्मक प्रोग्रामिंग के बारे में गलत धारणा हो सकती है।

वर्तमान में मेरी पसंद की भाषा C # है, और मैं C ++ पृष्ठभूमि से आता हूं। मैं एक गेम डेवलपर के रूप में काम करता हूं लेकिन मैं वर्तमान में बेरोजगार हूं।

मुझे आर्किटेक्चर का बड़ा शौक है। मेरे गुण साफ, लचीले, पुन: प्रयोज्य और बनाए रखने योग्य कोड हैं। मुझे नहीं पता कि मुझे इन तरीकों से जहर दिया गया है या अगर यह बेहतर है। क्या मुझे बुखार से राहत मिल रही है या मुझे आगे बढ़ना चाहिए? मैं समझता हूं कि यह "नौकरी के लिए सही उपकरण का उपयोग" करने के बारे में एक प्रश्न हो सकता है , लेकिन मैं आपके विचारों को सुनना चाहूंगा।

क्या मुझे एक कार्यात्मक भाषा चुननी चाहिए? मेरे डर के कारकों में से एक दृश्य स्टूडियो के आराम को छोड़ना है।


आप F # आज़मा सकते हैं अगर विज़ुअल स्टूडियो छोड़ना एक डील-ब्रेकर है।
एडम लेअर

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

मैं वर्तमान में बेरोजगार हूं ... क्या यह पहली बात नहीं होनी चाहिए?
जॉब

मैं थोड़ी देर के लिए वी.एस. के बिना काम करने की कोशिश करूंगा। आपको लग सकता है कि बहुत कम से कम तरीके से काम करना मज़ेदार हो सकता है।
ज़ाक्रि के

@ जो, हां, लेकिन मुझे हाल ही में काफी बुरी घटनाओं की एक श्रृंखला के साथ मारा गया है :) मैंने अपना पैर क्षतिग्रस्त कर दिया (अच्छी तरह से मैं अपने पैर के साथ कोड नहीं करता हूं, लेकिन, अभी भी ...) अभी हाल ही में अपनी पुरानी नौकरी छोड़ने के बाद एक नए के लिए खोज।
स्टेटमेंट

जवाबों:


5

हाँ

नया सामान सीखना मजेदार होना चाहिए। और प्रोग्राम के लिए एक नया तरीका सीखना आपको एक बेहतर प्रोग्रामर बनाना चाहिए। हास्केल या एर्लैंग में से एक की जाँच करें, दोनों कार्यात्मक हैं लेकिन वे बहुत अलग हैं। यदि आप हास्केल को चुनते हैं, तो यूट्यूब या पॉडकास्ट पर "साइमन पेटन जोन्स" द्वारा कुछ बातचीत करें। आदमी एक महान वक्ता है।


1
मैंने कई कारणों के इस उत्तर को चुना। @Zachary K का कहना है कि एक प्रसिद्ध स्थान के बॉक्स से बाहर कदम रखना और एक और परिप्रेक्ष्य होना मज़ेदार हो सकता है। मुझे कुछ नया करने की कोशिश करने से डरना नहीं चाहिए । यह दिनों का अंत नहीं है। हास्केल एक ऐसी भाषा है जिसने कुछ समय पहले विभिन्न चर्चाओं में मेरा ध्यान आकर्षित किया है। मुझे नहीं पता कि मुझे एक कार्यात्मक भाषा की आवश्यकता है, लेकिन @Toby एलन का कहना है कि यह देखने का एक शानदार तरीका है कि अन्य तरीके कैसे काम करते हैं और मैं कुछ अनरियलस्क्रिप्ट्स को आज़माने के बाद इस पर सहमत हूं। @ammoQ इस बिंदु से थोड़ा चूक गया लेकिन मेरे पास मेरे प्रश्न की बहुत अच्छी परिभाषा नहीं थी। मुझे अब भी उसकी चिंता है।
स्टेटमेंट

मदद करने में खुशी। मज़े करो
Zachary K

14

पवित्र * * *। चांदी की गोली नहीं है। त्यागपत्र देना। आराम करें, गहरी सांस लें।

सिर्फ इसलिए कि आपके टूलबॉक्स में एक उपकरण है, इसका मतलब यह नहीं है कि आप इसका उपयोग करने के लिए बाध्य हैं। हाथ में काम पर ध्यान लगाओ, यानी एक प्रोग्राम लिखना जो काम करता है, और कोड खराब होने पर रिफ्लेक्टर। हर छोटे से विवरण को केवल संक्षिप्त और सार न करें क्योंकि यह भविष्य में किसी दिन बदल सकता है। IMO यह वास्तव में काफी बेहतर सीधे आगे KISS और YAGNI, प्रारंभ करें, और आवश्यकताओं को बदलने के लिए जब वे करने के लिए प्रतिक्रिया करने के लिए वास्तव में बदल

मुझे नहीं लगता कि यहां कोई भी आपको बता सकता है कि आपकी जरूरतों के लिए कार्यात्मक भाषा बेहतर है या नहीं। क्योंकि आपने हमें यह नहीं बताया कि यह क्या है जिस पर आप काम कर रहे हैं।


खैर, मैं अभी कुछ भी विशेष रूप से काम नहीं कर रहा हूँ। मैं नौकरियों के बीच हूं। मैं / एक गेम डेवलपर था।
कथन

3
यह एक खतरनाक स्थिति है, जिसमें ओवरगेंरिंग के बारे में जानकारी दी गई है। कोई समय सीमा नहीं, कोई बैकलॉग नहीं है, बस विवरण के साथ जुनूनी होने के लिए बहुत अधिक समय है।
user281377

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

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

2
यह बिल्कुल ठीक है जब आप हाथ में हर उपकरण आज़माते हैं जो आप नौकरियों के बीच में हैं, लेकिन मुझे डर है कि हम आपको यह नहीं बता सकते कि जूता फिट बैठता है या नहीं।
user281377

12

आप F # उठा सकते हैं । यह .NET फंक्शनल लैंग्वेज है, जो आपको Visual Studio का उपयोग करने और आपके .NET ज्ञान का बहुत अधिक उपयोग करने की अनुमति देगा। यह निश्चित रूप से सी # विधानसभाओं के साथ एकीकृत है (आप आसानी से एक परियोजना में सी #, सी ++ / सीएलआई और एफ # गठबंधन करने की अनुमति)। एफ # समर्थन वीएस प्रो या बेहतर के साथ आता है, मुझे यकीन नहीं है कि यह डिफ़ॉल्ट रूप से सक्षम है या नहीं।


मुझे लगता है कि VS2008 में F # के लिए एक ऐडऑन है, लेकिन यह VS2010 में डिफ़ॉल्ट है।
अपूर्व ०२०

एफ # एक मुफ्त वीएस शेल के साथ भी काम करता है।
लॉजिक

6

IMO, यह एक कार्यात्मक भाषा को आज़माने लायक है। यहां तक ​​कि अगर आप इसे किसी जारी उत्पाद में सीधे उपयोग नहीं करते हैं, तो भी यह सीखना लगभग निश्चित रूप से प्रोग्रामिंग पर कुछ अलग दृष्टिकोण / दृष्टिकोण देने में मदद करेगा। भले ही आप सी # में अपने सभी "वास्तविक" कोडिंग को जारी रखना चाहते हैं, लेकिन संभावना बहुत ही उचित है कि यह आपको उस कोड को बेहतर बनाने में मदद करेगा जो आप सी # में लिखते हैं।

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


2

हाँ तुम्हें करना चाहिए।

यदि आप हास्केल की तरह एक शुद्ध एक चुनते हैं, तो आप न केवल एक नई भाषा सीखेंगे, बल्कि सोचने का एक नया तरीका भी सीखेंगे। यह आपको बाद में आपके प्रोसेरल / ओओ कार्य में भी मदद कर सकता है।

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


मैंने वास्तव में tryhaskell.org पर शुरुआत की है :) नई चीजें सीखना रोमांचक है।
स्टेटमेंट

1

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


1
आपको हमेशा दूसरी भाषा की आवश्यकता होती है। यहां तक ​​कि अगर आप इसका इस्तेमाल कभी नहीं करते हैं, तो यह एक नई भाषा सीखने का एक शानदार अनुभव है। किसी एक भाषा में सब कुछ नहीं होता।
टॉबी एलन

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

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

+1 @ टॉबी। मैंने हाल ही में UnrealScript संदर्भ के माध्यम से स्किम्ड किया और राज्यों et.c के साथ काम करने के लिए कुछ दिलचस्प भाषा समाधान देखे। यह समस्या के बारे में सोचने के मामले में C # पर ले जाता है और उनके पास एक अच्छा समाधान है। तो हाँ, मेरा मानना ​​है कि जब आप अपने सैंडबॉक्स से बाहर निकलते हैं और अपने पड़ोसियों से मिलने वाले सभी रेत और खिलौनों के बारे में बताते हैं तो आप बहुत कुछ सीखते हैं :)
कथन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.