কিছু ভাল এবং কনস
পলিমারফিকের জন্য পেশাদার:
- একটি ছোট পলিমারফিক ইন্টারফেসটি পড়া সহজ। আমাকে কেবল একটি পদ্ধতি মনে রাখতে হবে।
- ভাষাটি যেভাবে ব্যবহার করা হচ্ছে তার সাথে এটি যায় - হাঁসের টাইপিং।
- আমি যদি কোন জিনিসকে একটি খরগোশকে বাইরে টানতে চাই তা যদি পরিষ্কার হয়ে যায় তবে যাইহোক দ্ব্যর্থতা থাকা উচিত নয়।
- জাভা যেমন স্থির ভাষায় প্রচুর ধরণের চেক করা খারাপ বলে বিবেচিত হয়, যেখানে বস্তুর প্রকারের জন্য প্রচুর ধরণের চেক থাকা কুৎসিত কোড তৈরি করে, যাদুকরকে সত্যই কী ধরণের জিনিসকে ধাঁধা থেকে বের করে আনতে পারছে সেগুলির মধ্যে পার্থক্য করা উচিত? ?
অ্যাড-হক জন্য পেশাদাররা:
- এটি কম স্পষ্ট, আমি
Cat
উদাহরণ থেকে একটি স্ট্রিং টানতে পারি ? এটা কি কাজ করবে? যদি না হয়, আচরণ কি? আমি যদি এখানে টাইপটি সীমাবদ্ধ না রাখি তবে ডকুমেন্টেশনে বা পরীক্ষাগুলিতে যা আরও খারাপ চুক্তি করতে পারে আমাকে তা করতে হবে।
- আপনার কাছে এক জায়গায় খরগোশকে টেনে তোলার সমস্ত পরিচালনা রয়েছে, যাদুকর (কেউ কেউ এটাকে কন হিসাবে বিবেচনা করতে পারেন)
- আধুনিক জেএস অপ্টিমাইজারগুলি মনোমরফিক (কেবলমাত্র এক ধরণের ক্ষেত্রে কাজ করে) এবং পলিমারফিক ফাংশনগুলির মধ্যে পার্থক্য করে। তারা জানেন যে কীভাবে মনোমরফিকগুলি আরও ভালভাবে অপ্টিমাইজ করা যায় তাই ভি 8 এর মতো ইঞ্জিনগুলিতে
pullRabbitOutOfString
সংস্করণটি আরও দ্রুত হতে পারে । আরও তথ্যের জন্য এই ভিডিওটি দেখুন। সম্পাদনা: আমি নিজেই নিখুঁত লিখেছি, বাস্তবে দেখা যায় যে এটি সর্বদা হয় না ।
কিছু বিকল্প সমাধান:
আমার মতে, এই ধরণের নকশাটি খুব 'জাভা-স্ক্রিপি' দিয়ে শুরু হয় না। জাভা স্ক্রিপ্ট হ'ল সি #, জাভা বা পাইথনের মতো ভাষা থেকে আলাদা আইডিয়াম সহ একটি আলাদা ভাষা। এই প্রতিমাগুলির বিকাশ বছরের বিকাশকারীদের ভাষার দুর্বল এবং শক্তিশালী অংশগুলি বোঝার চেষ্টা করে, আমি যা করব তা এই প্রতিমাগুলির সাথে লেগে থাকার চেষ্টা করুন।
আমি ভাবতে পারি এমন দুটি দুর্দান্ত সমাধান রয়েছে:
- বস্তুগুলিকে উঁচু করে তোলা, অবজেক্টগুলিকে "টেনে তোলা" করা, এগুলি রান-টাইমে ইন্টারফেসের সাথে সামঞ্জস্য করা, তারপরে ম্যাজিশিয়ানকে টানা যায় এমন বস্তুগুলিতে কাজ করা।
- কৌশল প্যাটার্ন ব্যবহার করে যাদুকরকে বিভিন্ন ধরণের অবজেক্টগুলি কীভাবে পরিচালনা করতে হবে তা গতিময়ভাবে শেখানো।
সমাধান 1: উত্থাপনকারী বিষয়গুলি
এই সমস্যার একটি সাধারণ সমাধান হ'ল খরগোশগুলি এড়িয়ে যাওয়ার ক্ষমতা সহ বস্তুগুলিকে 'উন্নত' করা।
এটি হ'ল একটি ফাংশন থাকুন যা কিছু ধরণের অবজেক্ট নেয় এবং এর জন্য একটি টুপি বের করে যোগ করে। কিছুটা এইরকম:
function makePullable(obj){
obj.pullOfHat = function(){
return new Rabbit(obj.toString());
}
}
আমি makePullable
অন্যান্য অবজেক্টের জন্য এই জাতীয় ফাংশন তৈরি করতে পারি, আমি একটি তৈরি করতে makePullableString
পারি ইত্যাদি। আমি প্রতিটি ধরণের রূপান্তরকে সংজ্ঞায়িত করছি। যাইহোক, আমি আমার জিনিসগুলি উন্নত করার পরে, এগুলি জেনেরিক উপায়ে ব্যবহার করার মতো আমার কোনও প্রকার নেই। জাভাস্ক্রিপ্ট মধ্যে একটি ইন্টারফেস একটি হাঁস টাইপিং দ্বারা নির্ধারিত হয়, যদি এটি একটি হয়েছে pullOfHat
পদ্ধতি আমি করতে যাদুকরের পদ্ধতি সঙ্গে এটি টান।
তারপরে যাদুকর এটি করতে পারে:
Magician.pullRabbit = function(pullable) {
var rabbit = obj.pullOfHat();
return {rabbit:rabbit,text:"Tada, I pulled a rabbit out of "+pullable};
}
বস্তুগুলিকে উঁচু করা, একজাতীয় মিশ্রণ প্যাটার্ন ব্যবহার করে আরও জেএস জিনিস করার মতো মনে হয়। (দ্রষ্টব্য, সংখ্যা, নাল, অপরিজ্ঞাত এবং বুলিয়ান ভাষাতে মান ধরণের ক্ষেত্রে এটি সমস্যার সমাধান করুন তবে তারা সকলেই বাক্স-সক্ষম)
এই জাতীয় কোডটি কেমন দেখতে পারে তার একটি উদাহরণ এখানে
সমাধান 2: কৌশল প্যাটার্ন
স্ট্যাকওভারফ্লোতে জেএস চ্যাট রুমে এই প্রশ্নটি নিয়ে আলোচনা করার সময় আমার বন্ধু ফিনোমোনমোনমিনাল কৌশল প্যাটার্নটি ব্যবহারের পরামর্শ দিয়েছিল ।
এটি আপনাকে রান সময়গুলিতে খরগোশগুলিকে রান করার সময় বিভিন্ন সময় টানতে সক্ষম করার সুযোগ দেয় এবং খুব জাভাস্ক্রিপ্ট'এ কোড তৈরি করে। একজন যাদুকর শিখতে পারেন কীভাবে বিভিন্ন ধরণের জিনিসগুলি টুপিগুলির বাইরে টানতে হয় এবং এটি সেই জ্ঞানের উপর ভিত্তি করে এগুলিকে টান দেয়।
কফিস্ক্রিপ্টে এটি কীভাবে দেখাবে তা এখানে:
class Magician
constructor: ()-> # A new Magician can't pull anything
@pullFunctions = {}
pullRabbit: (obj) -> # Pull a rabbit, handler based on type
func = pullFunctions[obj.constructor.name]
if func? then func(obj) else "Don't know how to pull that out of my hat!"
learnToPull: (obj, handler) -> # Learns to pull a rabbit out of a type
pullFunctions[obj.constructor.name] = handler
আপনি এখানে সমান জেএস কোড দেখতে পারেন ।
এইভাবে, আপনি উভয় দুনিয়া থেকে উপকৃত হন, কীভাবে টানবেন তার ক্রিয়াটি কোনও বস্তুর সাথে শক্তভাবে মিলিত হয় না, বা যাদুকর এবং আমি মনে করি এটি খুব সুন্দর সমাধানের জন্য তৈরি করে।
ব্যবহার এমন কিছু হবে:
var m = new Magician();//create a new Magician
//Teach the Magician
m.learnToPull("",function(){
return "Pulled a rabbit out of a string";
});
m.learnToPull({},function(){
return "Pulled a rabbit out of a Object";
});
m.pullRabbit(" Str");