फंक्शनल प्रोग्रामिंग एक घोषणात्मक प्रतिमान है। एफपी के साथ स्ट्रेंथ में से एक यह है कि दुष्प्रभाव से बचा जाता है। यह कहा जाता है कि कुछ समस्याओं के लिए एफपी एक अच्छा फिट नहीं है।
क्या आम समस्याओं के लिए कार्यात्मक प्रोग्रामिंग एक अच्छा फिट नहीं है?
फंक्शनल प्रोग्रामिंग एक घोषणात्मक प्रतिमान है। एफपी के साथ स्ट्रेंथ में से एक यह है कि दुष्प्रभाव से बचा जाता है। यह कहा जाता है कि कुछ समस्याओं के लिए एफपी एक अच्छा फिट नहीं है।
क्या आम समस्याओं के लिए कार्यात्मक प्रोग्रामिंग एक अच्छा फिट नहीं है?
जवाबों:
अनुप्रयोग जो प्रकृति में बहुत ही स्टेटफुल हैं। वीडियो गेम एक अच्छा उदाहरण है क्योंकि वे वास्तविक दुनिया का मॉडल बनाते हैं। पिछली बार की स्थिति से हर बार कुछ परिवर्तन होने के बजाय, दुनिया की स्थिति को संशोधित करने के बारे में सोचने के लिए यह बहुत अधिक समझ में आता है।
गोली लगने के बाद एक ठोस उदाहरण एक राक्षस के स्वास्थ्य को बदल रहा होगा। यह एक बहुत अधिक समझदार है बस इसे बदलने के बजाय अपने स्वास्थ्य को बदलने के लिए इसे पूरी तरह से एक नया राक्षस है जो हर तरह से एक ही है सिवाय इसके कि यह कम स्वास्थ्य है। इस तरह के बदलावों से खेल की दुनिया में सब कुछ ठीक हो जाता है, और शुद्ध कार्यात्मक तरीके से ऐसा करना बहुत सहज नहीं है। मुझे लगता है कि कुछ महत्वपूर्ण प्रदर्शन दंड हो सकते हैं, कम से कम यदि आप इसे विशुद्ध रूप से कार्यात्मक भाषा में कर रहे हैं।
(एक साइड नोट के रूप में, खेल में कुछ समस्याएं कार्यात्मक प्रोग्रामिंग के लिए बहुत अच्छी तरह से अनुकूल हैं, जैसे कि एआई। एक हाइब्रिड कार्यात्मक / अनिवार्य भाषा उन मामलों के लिए एक उत्कृष्ट फिट होगी।)
वास्तविक समय एम्बेडेड प्रोग्रामिंग सभी दुष्प्रभावों के बारे में है। डिजिटल और एनालॉग io, टाइमर, धारावाहिक और समानांतर बंदरगाहों के साथ बातचीत, सब कुछ दिलचस्प है जो कि साइड इफेक्ट्स के साथ फ़ंक्शन को कॉल करके किया जाता है।
मेरा तर्क है कि जीयूआई प्रोग्रामिंग कार्यात्मक प्रोग्रामिंग के लिए एक अच्छा फिट नहीं है। GUI आमतौर पर बहुत ही स्टेटफुल होते हैं, और यह एक साइड-इफ़ेक्ट फ्री का उपयोग करने के बजाय राज्य का उपयोग करके मॉडल बनाना / प्रबंधित करना बहुत आसान है। जीयूआई के लिए एक कार्यात्मक प्रोग्रामिंग भाषा का उपयोग करना निश्चित रूप से संभव है ... लेकिन यह शायद एक अच्छा विचार नहीं है।
जैसा कि एक अन्य जवाब में कहा गया है, खेल अक्सर ट्रैकिंग राज्य द्वारा प्रबंधित करने के लिए आसान होते हैं, और जब आप एक कार्यात्मक भाषा में एक खेल लिख सकते हैं, तो यह अक्सर "राज्यपूर्ण" भाषा में ऐसा करने के लिए आसान और अधिक कुशल होता है (यानी, एक वस्तु-उन्मुख भाषा)।
डेटा-संचालित व्यावसायिक अनुप्रयोग। उपयोगकर्ता इंटरफ़ेस और सरल डेटा संचालन को FP की आवश्यकता नहीं है।
filter
, reduce
और map
। कुछ में फेंक sort
, partition
, groupBy
। सब के बाद, ऐसे आवेदनों लिखने के लिए सबसे व्यापक रूप से इस्तेमाल किया प्रोग्रामिंग भाषा एक्सेल, जो है एक कार्यात्मक भाषा।
आप प्रति प्रोग्राम कार्यात्मक प्रोग्रामिंग के लिए अनुकूल नहीं होने के लिए किसी भी समस्या को आसानी से खारिज नहीं कर सकते।
बहुत कुछ कार्यात्मक प्रोग्रामिंग और इसकी विशेषताओं के लिए उपयोग की जाने वाली वास्तविक भाषा पर निर्भर करता है।
एक उदाहरण रियलटाइम एम्बेडेड सिस्टम के लिए पहले से ही उल्लिखित एर्लैंग है।
राज्य-परिपूर्णता भी कार्यात्मक प्रोग्रामिंग के खिलाफ एक अच्छा मानदंड नहीं है, इससे निपटने के लिए कार्यात्मक प्रोग्रामिंग भाषाओं में कई सफल तरीके लागू किए गए हैं।
कार्यात्मक प्रोग्रामिंग के खिलाफ साइड इफेक्ट का भी अक्सर उल्लेख किया जाता है। हर प्रोग्राम जो पूरी तरह से एकरूप नहीं है, उसके साइड इफेक्ट्स हैं। तो हर वास्तविक दुनिया एफपी भाषा के पास इससे निपटने के लिए कोई रास्ता है, यह केवल एक मामला है कि दुनिया के दुष्प्रभावों को कैसे कम किया जाए।
वैश्विक चर की तरह मनमाने दुष्प्रभाव की कोई आवश्यकता नहीं है।
लेकिन समस्या वाले सेट हैं जो कार्यात्मक प्रोग्रामिंग में प्राप्त करना आसान बनाते हैं क्योंकि वे समस्या को देखने के आपके परिचित तरीके को उतना मोड़ नहीं देते हैं। लेकिन एक बार जब आप कार्यात्मक रूप से अधिक सोचने का प्रबंधन करते हैं तो कम से कम साइड-इफेक्ट्स के लिए अधिक से अधिक समस्या सेट खुल जाते हैं।
यहां तक कि जब प्रोग्रामिंग सी यह हमेशा के रूप में संभव के रूप में वैश्विक चर की तरह मनमाना दुष्प्रभाव को कम करने के लिए एक अच्छा विचार है।