2009-05-06 8 views
12

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

मुझे कोई मनमाना उदाहरण नहीं है जो सिर्फ कार्यात्मक दिखता है। मैं एक उदाहरण की तलाश में हूं जो दिखा सकता है कि किसी अन्य दृष्टिकोण से बेहतर समस्याओं को हल करने के लिए कार्यात्मक शक्तियों का उपयोग कैसे करें। मुझे पता है कि यह एक तरह का व्यक्तिपरक/शैली निर्भर है लेकिन अपने आप को (खुद) के लिए बहुत कठिन मत बनाओ।

उत्तर

17

सबसे पहले, आप समझना चाहते हैं कि कौन सा कार्यात्मक प्रोग्रामिंग माध्यम है; यही है, मूल अवधारणाएं क्या हैं और भाषा आपको उन अवधारणाओं का पालन करने की अनुमति देती है। ओओपी के लिए, मूल अवधारणाएं encapsulation, विरासत, और polymorphism (या सिर्फ छोटे talkers के लिए गुजरने संदेश) हैं। एफपी के लिए केंद्रीय सिद्धांत referential transparency (जो स्टेटलेसनेस का तात्पर्य है)। किसी ऐसी भाषा में कार्यात्मक शैली में प्रोग्राम करने का प्रयास करना जो कार्यात्मक विशेषताओं का समर्थन नहीं करता है (उदाहरण के लिए प्रथम श्रेणी वस्तुओं के रूप में कार्य) असंभव नहीं होने पर अजीब होगा। उन भाषाओं में ओओपी में प्रोग्रामिंग के साथ ही जिनके पास ओओपी विशेषताएं नहीं हैं।

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

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

ने कहा, यहां कुछ उम्मीदवार उपयोगी लिंक हैं।

  1. FP programming in JavaScript

  2. Mostly adequate guide to FP

+0

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

+0

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

+0

जावास्क्रिप्ट के कार्यात्मक उपयोग के बारे में और जानने के लिए मेरा अर्थ रहा है, यह एक शानदार जवाब है। साथ ही, @ केविन हैकसन ने जो पोस्ट किया है उसे जोड़ने के लिए, यहां एक [यूट्यूब वीडियो डगलस क्रॉकफोर्ड की विशेषता है] (http://www.youtube.com/watch?v=v2ifWcnQs6M) – blong

1

एक उदाहरण है कि मुझे याद है एक समारोह है कि ईवेंट हैंडलर

function bind(aHandler, aBind) { 
    var handler = aHandler; 
    var bind = aBind; 
    return function(event) { 
     return handler.call(bind, event); 
    } 
} 

यह स्कोप (currying) के साथ काम कर और आसान है के रूप में पंजीकरण के लिए एक वस्तु के लिए बाध्य किया जाता है।

+0

कैसे आप इस बाँध() फ़ंक्शन कहते हैं? –

+0

कहें कि आपके पास ऑब्जेक्ट ऑब्जेक्ट है जिसमें फ़ंक्शन कुछ फ़ंक्शन है। फिर आप element.addEventHandler ("eventtype", बाइंड (कुछ फ़ंक्शन, myObject) को कॉल करते हैं)। तो घटना समय पर आपके ऑब्जेक्ट पर फ़ंक्शन को –

0

jQuery पर एक नज़र डालें। यह ब्लॉग एक अच्छा मामला बनाता है कि यह एक कार्यात्मक शैली में है। http://importantshock.wordpress.com/2009/01/18/jquery-is-a-monad/

जिसके अनुसार, जे एस, एक कार्यात्मक भाषा (IMO) वास्तव में नहीं है तो यह होना करने के लिए एक शायद एक डेवलपर (एक हथौड़ा के रूप में एक पेचकश का उपयोग कर के रूप में सबसे कारगर रास्ता नहीं है के लिए मजबूर करने की कोशिश कर रहा है - फिर भी हो जाता है दीवार में नाखून लेकिन काफी तेज़ नहीं :)। फिर फिर, यह एक भेड़ का बच्चा भाषा है।

+0

कहा जाता है, क्या आप इस पर विस्तार कर सकते हैं? जावास्क्रिप्ट को बताने के आपके मुख्य कारण क्या हैं एक कार्यात्मक भाषा नहीं है? अलग/गायब क्या है? –

+1

मुझे और स्पष्ट होना चाहिए था। यह एक "पूरी तरह से" कार्यात्मक भाषा नहीं है। निश्चित रूप से आप उस शैली में लिखने के लिए लैम्ब्डा और बंद करने का लाभ उठा सकते हैं, लेकिन मुझे लगता है कि परिणामी वाक्यविन्यास ऐसा होता है जब हम शास्त्रीय विरासत को करने के लिए जावास्क्रिप्ट को मजबूर करने का प्रयास करते हैं। यह सिर्फ थोड़ा तनावपूर्ण दिखता है। पूर्ण प्रकटीकरण: मैं कार्यात्मक शैली में कोड नहीं करता हूं, इसलिए आपके लिए जो लोग करते हैं, सिंटैक्स शायद पूरी तरह से स्वीकार्य है। – pluckyglen

5

डगलस क्रॉकफोर्ड से JavaScript संसाधन पृष्ठ से लिंक करता है। यहां साइट से एक स्निपेट है:

कार्यात्मक जावास्क्रिप्ट में कार्यात्मक प्रोग्रामिंग के लिए एक लाइब्रेरी है। यह मानक उच्च-आदेश फ़ंक्शन जैसे मानचित्र, कम (उर्फ फ़ोल्ड), और चुनें (उर्फ फ़िल्टर) को परिभाषित करता है। यह आंशिक फ़ंक्शन एप्लिकेशन के लिए फ़ंक्शन जैसे करी, आरसीयूरी, और आंशिक भी परिभाषित करता है; और फ़ंक्शन-स्तरीय प्रोग्रामिंग के लिए लिखें, गार्ड, और । और ये सभी फ़ंक्शन स्ट्रिंग्स, जैसे 'x -> x + 1', 'x + 1', या '+1' को अधिक वर्बोज़ फ़ंक्शन (x) {वापसी x + 1} के समानार्थी के रूप में स्वीकार करते हैं।

संबंधित मुद्दे