जावास्क्रिप्ट एक कार्यात्मक प्रोग्रामिंग भाषा है


34
  • क्या जावास्क्रिप्ट एक कार्यात्मक भाषा है? मुझे पता है कि इसमें वस्तुएं हैं और आप इसके साथ OOP भी कर सकते हैं, लेकिन क्या यह एक कार्यात्मक भाषा भी है, क्या इसका उपयोग उस तरह से किया जा सकता है?
  • आप जानते हैं कि ओओपी कैसे बन गया / प्रोग्रामिंग में अगले विकास की तरह प्रतीत होता है, क्या इसका मतलब यह है कि 'कार्यात्मक प्रोग्रामिंग' अगला विकास है (ध्यान दें: यह राय के लिए एक संकेत नहीं है, लेकिन तथ्यात्मक साक्ष्य आधारित उत्तर के लिए एक संकेत है, और यह नोट है योगदानकर्ताओं की तुलना में मध्यस्थों के लिए अधिक;)
  • मैं उदाहरणों के माध्यम से सबसे अच्छा सीखता हूं, हो सकता है कि कोई व्यक्ति एक ही कार्य को OOP तरीके से और फिर एक कार्यात्मक प्रोग्रामिंग तरीके से खुद को समझने और तुलना करने के लिए दिखा सके कि कार्यात्मक प्रोग्रामिंग क्या करता है / है।

मैं वास्तव में ईमानदार होने के लिए 'कार्यात्मक प्रोग्रामिंग' को पूरी तरह से नहीं समझता: पी इसलिए जावास्क्रिप्ट को कार्यात्मक प्रोग्रामिंग से तुलना करना पूरी तरह से गलत हो सकता है।

कार्य की प्रोग्रामिंग को सामान्य शब्दों में रखना: क्या यह केवल अनाम कार्यों का उपयोग करके निरस्त करने का लाभ है?

या यह तरीका बहुत आसान है? एक सरल तरीके से, OOP वस्तुओं के माध्यम से अमूर्तता का लाभ है, लेकिन मेरा मानना ​​है कि OOP का वर्णन करने के लिए थोड़े बहुत सरल है।

क्या यह कार्यात्मक प्रोग्रामिंग का एक अच्छा उदाहरण है? ...

जावास्क्रिप्ट OOP उदाहरण:

// sum some numbers
function Number( v )
{ 
  this.val = v;
}

Number.prototype.add( /*Number*/ n2 )
{
    this.val += n2.val;
}

कार्यात्मक प्रोग्रामिंग उदाहरण:

function forEach(array, action) 
{
   for (var i = 0; i < array.length; i++)
       action(array[i]);
}  

function add(array)
{
    var i=0;
    forEach(array, function(n)
    {
        i += n;
    });
    return i;
}

var res = add([1,9]);

यह "कार्यात्मक प्रोग्रामिंग भाषा" की परिभाषा पर निर्भर करता है। एक व्यापक अर्थ में, इसे बंद मूल्यों के साथ कार्यात्मक मूल्यों के निर्माण की क्षमता के रूप में समझा जा सकता है, अर्थात एक "लंबो" निर्माण (लंबो-कैलकुलस के अर्थ में) के रूप में, और फिर जावास्क्रिप्ट बिल को फिट बैठता है।
बेसिल स्टैरनेवविच

2
Or is that way too simple?हाँ, यह है बेनामी फ़ंक्शंस कभी-कभी कार्यात्मक भाषाओं और बहु ​​प्रतिमान भाषाओं से जुड़े होते हैं जो कार्यात्मक प्रोग्रामिंग का पक्ष लेते हैं, लेकिन वे कार्यात्मक भाषाओं की एक अनूठी विशेषता नहीं हैं। लेकिन यदि आप उन्हें λ-पथरी के कार्यान्वयन के रूप में देखते हैं, तो वे कार्यात्मक प्रोग्रामिंग का एक मुख्य हिस्सा हैं, मुख्य बिंदु यह है कि यह इतना आसान नहीं है :)
yannis

जावास्क्रिप्ट का डिज़ाइन टेल-कॉल ऑप्टिमाइज़ेशन करने में सक्षम होने से कार्यान्वयन को रोकता है। मेरी पुस्तकों में जो अकेले इसे कार्यात्मक होने से रोकता है।
डैन_वाटरवर्ट

I know it has objects & you can do OOP with it alsoनहीं, आप नहीं कर सकते। यह प्रोटोटाइप आधारित प्रोग्रामिंग है जो वर्ग और वस्तु के बीच अंतर को समाप्त करता है। व्यक्तिगत रूप से मैं प्रोटोटाइप आधारित प्रोग्रामिंग को इस बुनियादी स्तर पर दोषपूर्ण मानता हूं।
RokL

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

जवाबों:


72

क्या जावास्क्रिप्ट एक कार्यात्मक भाषा है? मुझे पता है कि इसमें वस्तुएं हैं और आप इसके साथ OOP भी कर सकते हैं, लेकिन क्या यह एक कार्यात्मक भाषा भी है, क्या इसका उपयोग उस तरह से किया जा सकता है?

कभी-कभी, लोग कार्यात्मक प्रोग्रामिंग कहेंगे, जब उनका मतलब होता है तो जरूरी है प्रोग्रामिंग या प्रक्रियात्मक प्रोग्रामिंग । सख्ती से बोलना, कार्यात्मक प्रोग्रामिंग है:

कंप्यूटर विज्ञान में, कार्यात्मक प्रोग्रामिंग एक प्रोग्रामिंग प्रतिमान है जो गणना को गणितीय कार्यों के मूल्यांकन के रूप में मानता है और राज्य और पारस्परिक डेटा से बचा जाता है । यह फ़ंक्शन के अनुप्रयोग पर जोर देता है, अनिवार्य प्रोग्रामिंग शैली के विपरीत, जो राज्य में परिवर्तनों पर जोर देता है। फंक्शनल प्रोग्रामिंग की जड़ें लैम्ब्डा कैलकुलस में हैं, जो फंक्शन डेफिनिशन, फंक्शन एप्लिकेशन और इंस्ट्रक्शन की जांच के लिए 1930 के दशक में विकसित एक औपचारिक प्रणाली है। कई कार्यात्मक प्रोग्रामिंग भाषाओं को लंबोदा पथरी पर विस्तार के रूप में देखा जा सकता है।

हालाँकि जावास्क्रिप्ट व्यापक रूप से ज्ञात नहीं है या इसे एक कार्यात्मक भाषा के रूप में उपयोग किया जाता है, इसमें कुछ कार्यात्मक तत्व हैं :

जावास्क्रिप्ट योजना के साथ बहुत आम है। यह एक गतिशील भाषा है। इसमें एक लचीला डेटाटाइप (सरणियाँ) है जो आसानी से एस-भावों का अनुकरण कर सकता है। और सबसे महत्वपूर्ण बात, कार्य लंबोदर हैं।

योजना लिस्प की एक बोली है , और संभवत: उन भाषाओं में से एक है जो अधिकांश प्रोग्रामर सोचते हैं कि वे कब कार्यात्मक प्रोग्रामिंग पर चर्चा करते हैं। जब वस्तु अभिविन्यास की बात आती है , तो जावास्क्रिप्ट एक वस्तु उन्मुख भाषा है। लेकिन इसका ऑब्जेक्ट ओरिएंटेशन प्रोटोटाइप आधारित है :

प्रोटोटाइप-आधारित प्रोग्रामिंग ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की एक शैली है जिसमें कक्षाएं मौजूद नहीं हैं, और व्यवहार पुन: उपयोग (क्लास-आधारित भाषाओं में विरासत के रूप में जाना जाता है) मौजूदा वस्तुओं को क्लोन करने की एक प्रक्रिया के माध्यम से किया जाता है जो प्रोटोटाइप के रूप में काम करते हैं। इस मॉडल को वर्गहीन, प्रोटोटाइप-उन्मुख या उदाहरण-आधारित प्रोग्रामिंग के रूप में भी जाना जा सकता है। डेलिगेशन भाषा की विशेषता है जो प्रोटोटाइप-आधारित प्रोग्रामिंग का समर्थन करता है।

इसलिए यद्यपि जावास्क्रिप्ट ऑब्जेक्ट ओरिएंटेड है, यह अधिक सामान्य वर्ग आधारित मॉडल का पालन नहीं करता है , क्योंकि C ++, C #, जावा और PHP (और कुछ अन्य) जैसी भाषाएं करते हैं। और निश्चित रूप से यह एक अनिवार्य भाषा भी है, जो कि ऊपर वर्णित कार्यात्मक प्रोग्रामिंग के साथ भ्रम की ओर जाता है।

आप जानते हैं कि ओओपी कैसे बन गया / प्रोग्रामिंग में अगले विकास की तरह लगता है, इसका मतलब यह है कि 'कार्यात्मक प्रोग्रामिंग' अगला विकास है

ऑब्जेक्ट ओरिएंटेशन और फंक्शनल प्रोग्रामिंग कई अलग-अलग प्रोग्रामिंग प्रतिमानों में से सिर्फ दो हैं , वे विभिन्न अवधारणाओं और अमूर्तताओं के साथ प्रोग्रामिंग की विभिन्न शैलियों हैं। मुख्य शब्द "अलग" है। वहाँ एक भी प्रतिमान नहीं है जो दूसरों की तुलना में बेहतर है या दूसरों की तुलना में अधिक विकसित है, प्रत्येक और हर एक कुछ परिदृश्यों को दूसरों की तुलना में बेहतर फिट करता है। कुछ अन्य की तुलना में काफी पुराने हो सकते हैं, लेकिन विकासवादी शब्दों में, जो उन्हें बेहतर बनाता है, क्योंकि वे लंबे समय तक जीवित रहे हैं। लेकिन यह देखने का बहुत स्मार्ट तरीका नहीं है।

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

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

मैं उदाहरणों के माध्यम से सबसे अच्छा सीखता हूं, हो सकता है कि कोई व्यक्ति एक ही कार्य को OOP तरीके से और फिर एक कार्यात्मक प्रोग्रामिंग तरीके से खुद को समझने और तुलना करने के लिए दिखा सके कि कार्यात्मक प्रोग्रामिंग क्या करता है / है।

यह सीखने का एक भयानक तरीका होगा। कार्यात्मक और वस्तु अभिविन्यास काफी अलग शैली हैं, और बहुत सरल लोगों के अलावा कोई भी उदाहरण एक या दूसरी शैली में फिट नहीं होगा।

1 लेकिन हाल ही में जेनेरिक प्रोग्रामिंग के लिए अपने दायरे का विस्तार करने की कोशिश करता है, देखते हैं कि यह कैसे जाता है।


निष्कर्ष के तौर पर:

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

5
+1 महान प्रतिक्रिया। जिस तरह से प्रोग्रामिंग शिक्षा को संरचित किया गया है, नए कोडर को लगता है कि प्रतिमान अनन्य और असतत हैं, लेकिन वे नहीं हैं। OOP कोड लिखने की कोशिश करें जो कार्यात्मक अवधारणाओं का लाभ उठाता है जब यह ऐसा करने के लिए समझ में आता है। ईवेंट-चालित प्रोग्रामिंग एक प्रतिमान है, लेकिन ईडीपी के पहलू निश्चित रूप से हर गुई और वेब कार्यक्रम को प्रभावित करते हैं। पॉलिमॉर्फिज्म , ओओपी की एक मुख्य विशेषता, वास्तव में सामान्य प्रोग्रामिंग है। इन विचारों का नामकरण हमें अच्छी प्रोग्रामिंग को अवधारणा बनाने में मदद करता है, लेकिन आपको दूसरों के बहिष्कार के लिए उपयोग नहीं करना चाहिए।
कोजिरो

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

"यह सीखने का एक भयानक तरीका होगा।" मैंने इस पुस्तक को पढ़ना समाप्त कर दिया है जो एक समस्या प्रस्तुत करती है और इसे प्रतिमान की एक सीमा के साथ हल करती है, जिसमें OOP और FP शैलियाँ शामिल हैं: github.com/crista/exercises-in-proproming-style । मैंने इससे बहुत कुछ सीखा!
निक

@nick कि केवल आप के लिए वर्णन कर सकते हैं क्या प्रतिमान दिखता है और इस तरह कैसे यह काम करता है, लेकिन यह आपको बता नहीं है क्यों , यकीनन सबसे महत्वपूर्ण पहलू है। लेकिन आपको यह सीखने की जरूरत है कि इससे पहले कि आप सीख सकते हैं क्यों :) कभी-कभी हम भूल जाते हैं कि ये चीजें एक प्रक्रिया हैं।
मैथ्यू ब्रेंट

8

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


अच्छा और संक्षिप्त! सहमत है कि कार्यात्मक प्रोग्रामिंग अक्सर जेएस में कुछ करने का सबसे आसान तरीका है।
बंगलास्टिंक

भिक्षुओं की तुलना में भी अधिक रोचक, आप तीर को लागू कर सकते हैं जेएस ( cs.umd.edu/projects/PL/arrowlets )। अब, किसी को भी जावास्क्रिप्ट में तीर क्यों चाहिए , यह एक खुला सवाल है। लेकिन यह किया जा सकता है।
rtperson

मैं यह स्वीकार करूंगा कि मुझे यह जानने के लिए कि वे उपयोगी होंगे, तीर के बारे में पर्याप्त समझ नहीं है। लेकिन मैं जावास्क्रिप्ट में मोनाड्स पर एक किताब पर काम कर रहा हूं और तीर पर एक अध्याय जोड़ सकता हूं ( shop.oreilly.com/product/0636920023890.do )
Zachary K

6

सामान्य रूप से विकास का मतलब होता है वृद्धिशील परिवर्तन। OOP प्रक्रियात्मक प्रोग्रामिंग के लिए एक वृद्धिशील जोड़ नहीं है - वास्तव में, यह एक अंतर्निहित प्रोग्रामिंग मॉडल के लिए पूरी तरह से ऑर्थोगोनल है और उनमें से किसी के साथ जोड़ा जा सकता है। कार्यात्मक प्रोग्रामिंग प्रक्रियात्मक, ओओपी या जो कुछ भी नहीं है के अलावा एक वृद्धिशील नहीं है - यह मौलिक कंप्यूटिंग सिद्धांतों को व्यक्त करने के लिए एक वैकल्पिक आधार है , और यह वास्तव में पहला ऐसा आधार है जो पहले कंप्यूटरों के सामने आने से बहुत पहले तैयार हुआ था। यह समझना महत्वपूर्ण है कि ऐसी सभी मूलभूत प्रणालियाँ समतुल्य हैं (अर्थात, एक को दूसरे के संदर्भ में व्यक्त किया जा सकता है)।

कार्यात्मक दृष्टिकोण को समझने के लिए, आपको पहले मूल गणित प्राप्त करना होगा । यदि आप यह महसूस करना चाहते हैं कि जावास्क्रिप्ट में एक कार्यात्मक शैली में कोड करने का क्या मतलब है , तो jQuery का उपयोग करना शुरू करें ।


2

नहीं।

जावास्क्रिप्ट एक ऑब्जेक्ट-ओरिएंटेड भाषा सबसे पहले और सबसे महत्वपूर्ण है।

यह कहना नहीं है कि आप जावास्क्रिप्ट कार्यक्रमों को एक कार्यात्मक शैली में नहीं लिख सकते हैं, क्योंकि यदि आप पर्याप्त प्रयास करते हैं तो आप किसी भी ट्यूरिंग पूरी भाषा में एक कार्यात्मक शैली अपना सकते हैं । यदि आप चाहें, तो आप असेंबलर में कार्यात्मक प्रोग्रामिंग कर सकते हैं। लेकिन यह हर भाषा को कार्यात्मक नहीं बनाता है। आप समान रूप से हास्केल अनिवार्य या जावा को एक लॉजिक प्रोग्रामिंग भाषा कह सकते हैं - यदि आपने यह तरीका अपनाया, तो शब्द जल्द ही अर्थहीन हो जाएंगे।

IMO किसी भाषा को उपयुक्त प्रतिमान में वर्गीकृत करने का तरीका है:

  • भाषा निर्माण द्वारा सक्षम प्रमुख शैली क्या है (जावास्क्रिप्ट के लिए स्पष्ट रूप से OOP, कार्यात्मक भाषा इसके बजाय कार्यों और अपरिवर्तनीय डेटा मानों पर जोर देती है)
  • भाषा के मूल पुस्तकालयों में क्या प्रतिमान समर्थित है (जावास्क्रिप्ट के लिए फिर से स्पष्ट रूप से OOP)
  • भाषा में कौन-सी विशेषताएँ अक्षम या हतोत्साहित हैं (कार्यात्मक भाषाएँ हतोत्साहित करती हैं या परस्पर परिवर्तन योग्य हैं, जो जावास्क्रिप्ट के मामले में नहीं है)
  • भाषा का उपयोग करने वाले डेवलपर्स के समुदाय में क्या विकास शैली प्रचलित है (फिर से, ओओपी जावास्क्रिप्ट दुनिया में स्पष्ट रूप से प्रचलित है)

व्यक्तिगत रूप से मुझे यह नहीं बल्कि मनोरंजक लगता है कि बहुत से लोग एक भाषा का दावा करना पसंद करते हैं, "कार्यात्मक" सिर्फ इसलिए कि यह इस समय एक फैशनेबल शब्द है :-)

यदि आप वर्षों से प्रोग्रामिंग प्रतिमानों पर थोड़ा लंबा लेकिन मनोरंजक दृष्टिकोण चाहते हैं, तो यह अंकल बॉब मार्टिन के वीडियो "द लास्ट प्रोग्रामिंग लैंग्वेज" को देखने लायक है । मेरे लिए इस बात से बड़ी अंतर्दृष्टि यह थी कि प्रोग्रामिंग प्रतिमानों को परिभाषित किया जाता है कि वे क्या सुविधाएँ लेते हैं , न कि वे कौन-सी विशेषताएँ डालते हैं ......


What is the dominant style enabled by the language constructsमैं आपको यह प्रयास करने और लागू करने की हिम्मत करता हूं कि पर्ल ... या आपके किसी अन्य बिंदु पर, वास्तव में :)
yannis

2
पर्ल? अच्छी चुनौती! यह कुछ हद तक असेंबली लैंग्वेज की तरह है, जिसमें आप एक साथ चाहने वाले किसी भी प्रतिमान को हैक कर सकते हैं, लेकिन आम उपयोग में जो मैंने देखा है (स्क्रिप्टिंग) यह ज्यादातर एक अनिवार्य / प्रक्रियात्मक भाषा के रूप में उपयोग किया जाता है।
मिकेरा

वैसे, ऊप भी बहुत आम है। निश्चित रूप से एक निश्चित तरीके से। और, कार्यात्मक भी , हालांकि असामान्य। perl सिर्फ perl है, इससे कोई मतलब निकालने की कोशिश नहीं की जाती है :)
yannis

जावास्क्रिप्ट थोड़ा अधिक कार्यात्मक है तो जावा क्योंकि इसमें कम से कम क्लोजर और प्रथम श्रेणी के कार्य हैं। लेकिन आपका अधिकार, जावास्क्रिप्ट बस के रूप में कार्यात्मक है #।
रेयानोस

2

जावास्क्रिप्ट पहले प्रोटोटाइप है, कार्यात्मक क्षमताओं के साथ - यह प्रथम श्रेणी की वस्तुओं के रूप में कार्यों का उपयोग करके प्रदान किया गया है।

इसका मतलब यह है कि आप फ़ंक्शन को डेटा के रूप में उपयोग कर सकते हैं, जिसमें राज्य बनाए रखने वाले चर की आवश्यकता को कम करने का उत्सुक प्रभाव है। यदि आप पाते हैं कि स्वयं var स्टेटमेंट के लिए पहुँच रहे हैं, या एक या अधिक "if" स्टेटमेंट का उपयोग कर रहे हैं, तो आप एक कार्यात्मक शैली से भटक रहे हैं।

कार्यात्मक शैली की एक और उल्लेखनीय पहचान है कि कार्यों को केवल उनके मूल्यांकन के परिणाम को वापस करना चाहिए और उनके दायरे से बाहर राज्य पर कोई दुष्प्रभाव नहीं होना चाहिए:

// oops, this is producing a side effect
function sideEffecter(){//theres no input...        
    window.thingy = 'foo';
    // hey, this isn't returning anything!!!
} 

कार्यात्मक भाषाएं गैर-विनाशकारी हैं - जिसका अर्थ है कि वे इनपुट को म्यूट नहीं करते हैं, बल्कि इनपुट के आधार पर पूरी तरह से नया डेटा वापस करते हैं। इस धागे को देखें: https://stackoverflow.com/questions/749084/jquery-map-vs-each

कार्यात्मक भाषाओं में आम तौर पर बहुत सारे तरीके होते हैं - "मैप", "फोल्ड", "कम" जैसे नामों के साथ जो कि प्रक्रिया सूची / संग्रह हैं। जेएस में, अन्य भाषाओं के विपरीत, हमें इन्हें अस्तित्व में लाना होगा - कुछ उदाहरणों के लिए अंडरस्कोर।जे जैसी लाइब्रेरी देखें , हालांकि जेएस के नवीनतम कार्यान्वयन में इनमें से कुछ सीधे बॉक्स हैं।

ध्यान रखने वाली महत्वपूर्ण बात (IMO) यह है कि जबकि JS कुछ कार्यात्मक पैटर्न का उपयोग कर सकता है , यह तब निष्पादित करने के लिए हमेशा अच्छी तरह से सुसज्जित नहीं होता है।

उदाहरण के लिए, एक सरणी पर पुनरावृत्ति लें। आप इसे एक कार्यात्मक शैली या देशी लूप निर्माण का उपयोग करके कर सकते हैं - और आमतौर पर लूप बोलने से अधिक प्रदर्शन होता है। इस उदाहरण को लें - इसे बढ़ते हुए आकार के छोरों के साथ मारा और विभिन्न ब्राउज़रों में निष्पादन समय रिकॉर्ड करें (मैंने पहले ही ऐसा किया है, लेकिन मैंने बेंचमार्क खो दिया है - क्षमा करें!)।

var test = ['foo', 'bar', 'baz'], removeFunc, removeLoop;

//(semi)functional style...
// to be really functional each condition in the ternary would be another function
removeFunc = function(src, trg) {
    return src.length === 0 ? 
        src : 
            src[0] === trg ? 
                src.slice(1) : 
                    [src[0]].concat(removeFunc(src.slice(1), trg));
};

//but this is faster
removeLoop = function(src, trg){
    var len = src.length, // using variables to represent state...
        i=0, 
        result = [];        
    while(i < n){
       if(src[i] !== trg){
          result.push(src[i]);
       }
       i = i+1;
    }
}

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

यह कहना है कि आप जावास्क्रिप्ट में कार्यात्मक निर्माण का उपयोग नहीं करना चाहिए - यह पर्यावरण के सापेक्ष कार्यान्वयन में सीमाओं के बारे में पता होना चाहिए।

यहां कुछ लिंक दिए गए हैं जो आपकी रुचि के हो सकते हैं:

जावास्क्रिप्ट में कार्यात्मक प्रोग्रामिंग पर एक अच्छा अध्याय उत्कृष्ट "एलकसेंट जावास्क्रिप्ट" से

द लिटिल स्कीमर

मेरे एक मित्र ने लिटिल स्कीमर पर आधारित एक JS लाइब्रेरी लिखी

स्कीम पर एक अच्छा ट्यूटोरियल जो आपको एफपी को बेहतर तरीके से समझने में मदद कर सकता है

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