कई अन्य उत्तरों ने कार्यात्मक प्रोग्रामिंग के प्रदर्शन (समानांतरवाद) पक्ष पर ध्यान केंद्रित किया है, जो मुझे लगता है कि बहुत महत्वपूर्ण है। हालाँकि, आपने विशेष रूप से उत्पादकता के बारे में पूछा था, जैसा कि आप एक कार्यात्मक प्रतिमान की तुलना में एक ही कार्य को तेजी से कर सकते हैं।
मुझे वास्तव में (व्यक्तिगत अनुभव से) लगता है कि एफ # में प्रोग्रामिंग उस तरह से मेल खाती है जो मुझे बेहतर लगता है, और इसलिए यह आसान है। मुझे लगता है कि यही सबसे बड़ा अंतर है। मैंने F # और C # दोनों में प्रोग्राम किया है, और F # में "भाषा से लड़ने" में बहुत कम है, जो मुझे पसंद है। आपको F # के विवरण के बारे में सोचने की जरूरत नहीं है। यहाँ कुछ उदाहरण हैं जो मैंने पाया है कि मैं वास्तव में आनंद लेता हूं।
उदाहरण के लिए, भले ही F # स्टेटिकली टाइप किया गया हो (सभी प्रकारों का संकलन समय पर हल किया जाता है), प्रकार के अनुमान आपके पास क्या प्रकार हैं, इसलिए आपको यह कहने की आवश्यकता नहीं है। और अगर यह इसका पता नहीं लगा सकता है, तो यह स्वचालित रूप से आपके फ़ंक्शन / वर्ग / जो भी सामान्य बनाता है। इसलिए आपको कभी भी कोई भी जेनेरिक नहीं लिखना है, यह सब स्वचालित है। मुझे लगता है कि इसका मतलब है कि मैं समस्या के बारे में सोचने में अधिक समय बिता रहा हूं और इसे कैसे लागू किया जाए, कम है। वास्तव में, जब भी मैं C # पर वापस आता हूं, मुझे लगता है कि मैं वास्तव में इस प्रकार की चूक को याद करता हूं, आपको कभी भी यह एहसास नहीं होता है कि यह कितना विचलित करने वाला है जब तक आपको इसे करने की आवश्यकता नहीं है।
एफ # में भी, लूप लिखने के बजाय, आप फ़ंक्शन कहते हैं। यह एक सूक्ष्म परिवर्तन है, लेकिन महत्वपूर्ण है, क्योंकि आपको अब लूप निर्माण के बारे में सोचने की ज़रूरत नहीं है। उदाहरण के लिए, यहाँ कोड का एक टुकड़ा है जो कुछ के माध्यम से जाएगा और मैच करेगा (मुझे याद नहीं है कि यह एक परियोजना यूलर पहेली से क्या है):
let matchingFactors =
factors
|> Seq.filter (fun x -> largestPalindrome % x = 0)
|> Seq.map (fun x -> (x, largestPalindrome / x))
मुझे लगता है कि फ़िल्टर करना तो C # में एक नक्शा (जो प्रत्येक तत्व का रूपांतरण है) काफी सरल होगा, लेकिन आपको निचले स्तर पर सोचना होगा। विशेष रूप से, आपको स्वयं लूप लिखना होगा, और यदि स्टेटमेंट, और उन प्रकार की चीजों का अपना स्वयं का स्पष्ट विवरण होगा। एफ # सीखने के बाद से, मैंने महसूस किया है कि मैंने कार्यात्मक तरीके से कोड करना आसान पाया है, जहां यदि आप फ़िल्टर करना चाहते हैं, तो आप "फ़िल्टर" लिखते हैं, और यदि आप मैप करना चाहते हैं, तो आप लागू करने के बजाय "मैप" लिखते हैं। प्रत्येक विवरण।
मैं भी प्यार करता हूँ।>> ऑपरेटर, जो मुझे लगता है कि एफ # ओसमल से अलग करता है, और संभवतः अन्य कार्यात्मक भाषाएं। यह पाइप ऑपरेटर है, यह आपको एक एक्सप्रेशन के इनपुट में एक एक्सप्रेशन के आउटपुट को "पाइप" करने देता है। यह कोड का अनुसरण करता है कि मैं कैसे अधिक सोचता हूं। जैसे ऊपर दिए गए कोड स्निपेट में कहा गया है, "कारकों को अनुक्रम में लें, इसे फ़िल्टर करें, फिर इसे मैप करें।" यह बहुत उच्च स्तर की सोच है, जो आपको अनिवार्य प्रोग्रामिंग भाषा में नहीं मिलती है क्योंकि आप लूप लिखने में व्यस्त हैं और यदि कथन हैं। जब भी मैं दूसरी भाषा में जाता हूं तो यह सबसे ज्यादा याद आती है।
तो बस सामान्य तौर पर, भले ही मैं C # और F # दोनों में प्रोग्राम कर सकता हूं, मुझे F # का उपयोग करना आसान लगता है क्योंकि आप उच्च स्तर पर सोच सकते हैं। मैं यह तर्क दूंगा कि छोटे विवरण कार्यात्मक प्रोग्रामिंग (एफ # कम से कम) से हटा दिए जाते हैं, इसलिए कि मैं अधिक उत्पादक हूं।
संपादित करें : मैंने उन टिप्पणियों में से एक में देखा जो आपने एक कार्यात्मक प्रोग्रामिंग भाषा में "राज्य" का एक उदाहरण पूछा था। F # को अनिवार्य रूप से लिखा जा सकता है, इसलिए यहां एक प्रत्यक्ष उदाहरण है कि आप F # में कैसे परस्पर स्थिति रख सकते हैं:
let mutable x = 5
for i in 1..10 do
x <- x + i