कार्यात्मक प्रोग्रामिंग के लिए तैयारी में मेरे सोचने के तरीके को बदलें


9

प्रक्रियात्मक और ओओपी से आने के बाद प्रोग्रामिंग की एक कार्यात्मक शैली पर स्विच करते समय, मुझे "इस नए तरीके के बारे में" जानने के लिए किन चीजों की आवश्यकता है?

आप एफपी दुनिया में डाइविंग के लिए खुद को कैसे तैयार करते हैं और इसे पहली बार प्राप्त करते हैं?

पहले सीधे सीखने और सेट करने के लिए मूल बातें क्या हैं?


2
यह बहुत सामान्य है, इम्हो। बस पढ़ना शुरू करो! आजकल कार्यात्मक प्रोग्रामिंग पर अधिकांश किताबें और मैनुअल आपके प्रश्न के उत्तर से शुरू होते हैं।
devmiles.com

इसे आजमाएं अगर आप किसी चीज पर अटक जाते हैं तो एक सवाल पोस्ट करें
टॉम स्क्वायर्स

@ व्लादिमीर वोलोडिन: यह अच्छा होगा लेकिन यह हर किताब के लिए अनिवार्य नहीं है। क्या आप कुछ अच्छे लोगों (अधिमानतः भाषा अज्ञेय) की सिफारिश कर सकते हैं?
जॉनडूडो

आपको गोता लगाने की जरूरत नहीं है । आप OOP से FP की ओर संक्रमण को सुचारू करने के लिए c # जैसी OOP भाषा में लैम्ब्डा अभिव्यक्ति की कोशिश कर सकते हैं।
टॉमकैप

4
मुझे लगता है कि आपके पास यह पीछे है। कार्यात्मक प्रोग्रामिंग का प्रयास करें, और आपके सोचने का तरीका बदल जाएगा।
केविन क्लाइन

जवाबों:


10

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

संपादित करें: यदि आप कुछ अधिक तुलनात्मक चाहते हैं, तो "सात सप्ताह में सात भाषाएँ" आज़माएँ (अस्वीकरण: यह पुस्तक अभी भी मेरे TODO चैनल पर है)।


6

आपको प्रक्रियात्मक "पहले ऐसा करें, फिर यह करें, फिर यह करें ..." समस्याओं को हल करने के तरीके के बजाय घोषणात्मक सोच की आवश्यकता है। पुनरावृत्ति को समझना अच्छा प्रारंभिक बिंदु हो सकता है, क्योंकि यह प्रक्रियात्मक और घोषणात्मक सोच के बीच एक प्रकार का मीठा स्थान है।


4

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


3

एफपी लाम्बा कैल्कुलस पर आधारित है। आपको यह जानना होगा। यह एक अच्छा प्रारंभिक बिंदु है। कार्य ही सब कुछ हैं। राज्य की कोई अवधारणा नहीं है (हालांकि आप इसे उच्च स्तर पर नकली कर सकते हैं)।

OOP में,

a = 1 a = a + 1 है

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

फंक्शनल प्रोग्रामिंग का परिचय आपको एफपी के बारे में एक उच्च स्तरीय अवलोकन देता है।

हालांकि दो कैविएट

  1. यदि आप नौकरियों के लिए एफपी सीखना चाहते हैं, तो वहां बहुत अधिक रिक्तियां नहीं हैं। प्रक्रियात्मक और OOP अभी भी नौकरी के बाजार पर राज करता है। लेकिन एफपी किसी समस्या को हल करने के नए तरीके तलाशने में आपकी बहुत मदद कर सकता है।
  2. FP कंपाइलर धधकते जल्दी नहीं हैं। चूंकि एफपी समस्या को हल करने से अधिक चिंतित है, आप सी गति की उम्मीद नहीं कर सकते। लेकिन फिर भी आप निष्पादन प्रक्रिया को तेज करने के लिए संकलक (हास्केल में) को निर्देश जारी कर सकते हैं। व्यापार-बंद आपको आग से लड़ने वाले कीड़े के बजाय हाथ में कार्यक्रम पर ध्यान केंद्रित करने के लिए बहुत समय मिलता है।

8
"एफपी लैम्ब्डा कैलकुलस पर आधारित है। आपको यह जानना होगा।" नहीं, तुम नहीं। लैंबडा कैलकुलस को जानना कार्यात्मक प्रोग्रामिंग को समझने के लिए अधिक आवश्यक नहीं है ट्यूरिंग मशीन (या असेंबली) को जानने के लिए आवश्यक है कि अनिवार्य प्रोग्रामिंग को समझना आवश्यक है।
sepp2k

@ sepp2k एक दीर्घकालिक उद्देश्य के साथ एफपी पर अच्छा पाने के लिए, मेरा ईमानदारी से मानना ​​है कि लैंबडा कैलकुलस सीखना आवश्यक है। आप इसे लैम्ब्डा कैलकुलस के बिना सीख सकते हैं लेकिन इसे सीखना आपको एफपी में बेहतर बना देगा।
Ubermensch

2
एफपी प्रमाणित तौर पर यह बताता है कि राज्य आमतौर पर अपरिवर्तनीय है, यह भी सुनिश्चित नहीं है कि मैं संकलक के धीमे होने के बयान से सहमत हूं
जे.के.

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

3

मैं निम्नलिखित मंत्र को याद करने की पूरी कोशिश करता हूं:

डेटा में -> ट्रांसफ़ॉर्म डेटा -> डेटा आउट

या

ट्रांसफॉर्मडाटा (डेटा इन) -> डेटा आउट


1
यह ट्रांसफॉर्मडाटा (डेटाइन) -> डाटाऑट
उबेरमेंस

:) एक मैट्रा के रूप में "डेटा इन, ट्रांसफॉर्म डेटा, डेटा आउट" को "ट्रांसफॉर्मडाटा, ओपन ब्रैकेट, डेटा इन, क्लोज ब्रैकेट, डेटा आउट" कहना आसान है, मैं केवल मजाक कर रहा हूं मैं आपसे सहमत हूं।
डार्क नाइट

यह सिर्फ एक दोस्ताना टिप्पणी है दोस्त। जवाब देने के लिए धन्यवाद।
Ubermensch

मुझे पता है, मैं सिर्फ तुम्हारे साथ मजाक कर रहा था, कोई अपराध नहीं, वास्तव में मुझे लगता है कि मैं अपनी मातृ को अपडेट करूंगा।
डार्क नाइट

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