कार्यात्मक प्रोग्रामिंग (गतिशील प्रकार प्रणाली के साथ) में polymorphism का उपयोग कैसे करें?कार्यात्मक प्रोग्रामिंग में बहुरूपता का उपयोग कैसे करें?
चलिए निम्नलिखित उदाहरण पर विचार करें (पहले एफपी में ओओपी सेकेंड में)। कार्यक्रम बहुत सरल है - आंकड़ों की सूची है और हमें उन सभी को आकर्षित करने की आवश्यकता है, अलग-अलग आंकड़े विभिन्न ड्राइंग एल्गोरिदम का उपयोग करते हैं।
ओओपी में इसे छोटे से किया जा सकता है, लेकिन एफपी में इसे कैसे किया जाए? विशेष रूप से गतिशील प्रकार प्रणाली वाली भाषाओं में, जैसे योजना, क्लोजर (स्थिर प्रकार संकलन समय पर संकल्प के बिना)?
मैंने सरल कोड बनाया (लाइव संस्करण http://tinkerbin.com/0C3y8D9Z, 'रन' बटन दबाएं)। मैंने एफपी नमूना में स्विच किया है, लेकिन यह एक बहुत बुरा दृष्टिकोण है। इस तरह की समस्या को कैसे हल किया जा सकता है?
नमूने जावास्क्रिप्ट में हैं, लेकिन यह केवल सादगी के उद्देश्य के लिए है, गतिशील टाइपिंग सिस्टम के साथ किसी भी कार्यात्मक भाषा में समाधान देखना दिलचस्प होगा।
OOP
var print = function(message){document.write(message + "\n<br/>")}
// Object Oriented Approach.
var circle = {
draw: function(){print("drawing circle ...")}
}
var rectangle = {
draw: function(){print("drawing rectangle ...")}
}
var objects = [circle, rectangle]
objects.forEach(function(o){
o.draw()
})
एफपी
var print = function(message){document.write(message + "\n<br/>")}
// Functional Approach.
var circle = {type: 'Circle'}
var drawCircle = function(){print("drawing circle ...")}
var rectangle = {type: 'Rectangle'}
var drawRectangle = function(){print("drawing rectangle ...")}
var objects = [circle, rectangle]
objects.forEach(function(o){
if(o.type == 'Circle') drawCircle(o)
else if(o.type == 'Rectangle') drawRectangle(o)
else throw new Error('unknown type!')
})
मुझे multimethods के बारे में आपकी बात पसंद है, लेकिन मुझे समझ में नहीं आता कि आप दूसरे कोड स्निपेट के साथ क्या प्राप्त कर रहे हैं _ या आप केवल कार्यात्मक शैली का उपयोग कर सकते हैं _... – DaoWen
@DaoWen एफपी समाधान में अतिरिक्त बिना आसानी से हासिल किया जा रहा है कपोल-कल्पना। – mobyte
उस स्थिति में मुझे लगता है कि आपको अपने कोड में एक त्रुटि है क्योंकि यह समझ में नहीं आता है। '(डीफ ऑब्जेक्ट्स [ड्रा-सर्कल ड्रा-आयत]]' ??? उन कार्यों को कहाँ परिभाषित किया गया है? – DaoWen