পলিমারফিজমের উদ্দেশ্য কী?
পলিমারফিজম ধরণের সমতুল্যের জন্য শর্তটি শিথিল করে স্থিতিশীল প্রকারের সুরক্ষা না হারিয়ে (উল্লেখযোগ্য) স্ট্যাটিক টাইপ সিস্টেমকে আরও নমনীয় করে তোলে। প্রমাণটি রয়ে গেছে যে কোনও প্রোগ্রাম কেবল তখনই চলবে যদি এতে কোনও ধরণের ত্রুটি থাকে না।
পলিমারফিক ফাংশন বা ডেটা টাইপ মনোমोर्ফিকের চেয়ে বেশি সাধারণ, কারণ এটি দৃশ্যের বিস্তৃত পরিসরে ব্যবহার করা যেতে পারে। এই অর্থে বহুবর্ষবাদ কঠোরভাবে টাইপ করা ভাষায় সাধারণীকরণের ধারণাকে উপস্থাপন করে।
এটি জাভাস্ক্রিপ্টে কীভাবে প্রযোজ্য?
জাভাস্ক্রিপ্ট একটি দুর্বল, গতিশীল টাইপ সিস্টেম আছে। এই জাতীয় ধরণের সিস্টেমটি কেবলমাত্র এক প্রকারযুক্ত একটি কঠোর প্রকারের সিস্টেমের সমতুল্য। আমরা এই জাতীয় প্রকারকে একটি বিশাল ইউনিয়নের ধরণ (সিউডো সিনট্যাক্স) হিসাবে ভাবতে পারি:
type T =
| Undefined
| Null
| Number
| String
| Boolean
| Symbol
| Object
| Array
| Map
| ...
প্রতিটি মান রান-টাইমে এই জাতীয় বিকল্পগুলির একটির সাথে যুক্ত হবে। এবং যেহেতু জাভাস্ক্রিপ্ট দুর্বলভাবে টাইপ করা হয়েছে, তাই প্রতিটি মান তার প্রকারকে যে কোনও সংখ্যক বার পরিবর্তন করতে পারে।
যদি আমরা কোনও ধরণের তাত্ত্বিক দৃষ্টিভঙ্গি গ্রহণ করি এবং কেবলমাত্র এক প্রকারের বিষয়টি বিবেচনা করি তবে আমরা দৃ certain়তার সাথে বলতে পারি যে জাভাস্ক্রিপ্টের টাইপ সিস্টেমে পলিমারফিজমের ধারণা নেই। পরিবর্তে আমাদের কাছে হাঁসের টাইপিং এবং অন্তর্নিহিত ধরণের জবরদস্তি রয়েছে।
তবে এটি আমাদের আমাদের প্রোগ্রামগুলির ধরণের সম্পর্কে চিন্তাভাবনা থেকে বিরত থাকা উচিত নয়। জাভাস্ক্রিপ্টে প্রকারের অভাবের কারণে কোডিং প্রক্রিয়া চলাকালীন আমাদের সেগুলি নির্ধারণ করা দরকার। আমাদের মন অনুপস্থিত সংকলকটির জন্য দাঁড়াতে হবে, অর্থাত্ কোনও প্রোগ্রামের দিকে নজর দেওয়ার সাথে সাথে অবশ্যই আমাদের অবশ্যই অ্যালগোরিদমগুলি নয়, অন্তর্নিহিত (সম্ভবত পলিমারফিক) প্রকারগুলিও সনাক্ত করতে হবে। এই ধরণেরগুলি আরও নির্ভরযোগ্য এবং আরও শক্তিশালী প্রোগ্রামগুলি তৈরি করতে আমাদের সহায়তা করবে।
এটি যথাযথভাবে করার জন্য আমি আপনাকে বহুকর্মের সবচেয়ে সাধারণ প্রকাশগুলির একটি ওভারভিউ দিতে যাচ্ছি।
প্যারামেট্রিক পলিমারফিজম (ওরফে জেনেরিকস)
প্যারামেট্রিক পলিমারফিজম বলে যে বিভিন্ন ধরণের বিনিময়যোগ্য কারণ প্রকারগুলিতে মোটেই গুরুত্বপূর্ণ নয়। একটি ফাংশন যা প্যারামেট্রিক পলিমারফিক ধরণের এক বা একাধিক পরামিতিগুলি সংজ্ঞায়িত করে সেগুলি সম্পর্কিত যুক্তিগুলি সম্পর্কে কিছু জানতে হবে না তবে সেগুলি একইরকম আচরণ করবে, কারণ তারা যে কোনও ধরণের অবলম্বন করতে পারে। এটি বেশ সীমাবদ্ধ, কারণ এই জাতীয় ফাংশনটি কেবলমাত্র তার তথ্যগুলির অংশ নয় এমন আর্গুমেন্টগুলির বৈশিষ্ট্যগুলির সাথে কাজ করতে পারে:
const id = x => x;
id(1);
id("foo");
const k = x => y => x;
const k_ = x => y => y;
k(1) ("foo");
k_(1) ("foo");
const append = x => xs => xs.concat([x]);
append(3) ([1, 2]);
append("c") (["a", "b"]);
অ্যাডহক পলিমারফিজম (ওরফে ওভারলোডিং)
অ্যাডহক পলিমারফিজম বলে যে বিভিন্ন ধরণের শুধুমাত্র একটি নির্দিষ্ট উদ্দেশ্যে সমতুল্য। এই অর্থে সমতুল্য হতে একটি ধরণের অবশ্যই সেই উদ্দেশ্যে নির্দিষ্ট ফাংশনের একটি সেট বাস্তবায়ন করতে হবে। এমন একটি ফাংশন যা অ্যাড-হক পলিমারফিক ধরণের এক বা একাধিক পরামিতিগুলি সংজ্ঞায়িত করে তারপরে কোন ফাংশনগুলির সেটগুলি তার প্রতিটি আর্গুমেন্টের সাথে জড়িত তা জানতে হবে।
অ্যাড-হক পলিমারফিজম একটি ফাংশনকে ধরণের বৃহত ডোমেনের সাথে সামঞ্জস্য করে। নিম্নলিখিত উদাহরণটি "মানচিত্রের ওভার" উদ্দেশ্য এবং কীভাবে প্রকারগুলি এই সীমাবদ্ধতাটি প্রয়োগ করতে পারে তা চিত্রিত করে। ফাংশনের একটি সেট পরিবর্তে "ম্যাপেবল" সীমাবদ্ধতায় কেবল একটি একক map
ফাংশন অন্তর্ভুক্ত থাকে:
class Option {
cata(pattern, option) {
return pattern[option.constructor.name](option.x);
}
map(f, opt) {
return this.cata({Some: x => new Some(f(x)), None: () => this}, opt);
}
};
class Some extends Option {
constructor(x) {
super(x);
this.x = x;
}
};
class None extends Option {
constructor() {
super();
}
};
const map = f => t => t.map(f, t);
const sqr = x => x * x;
const xs = [1, 2, 3];
const x = new Some(5);
const y = new None();
console.log(
map(sqr) (xs)
);
console.log(
map(sqr) (x)
);
console.log(
map(sqr) (y)
);
সাব টাইপ পলিমারফিজম
যেহেতু অন্যান্য উত্তর ইতিমধ্যে সাব টাইপ পলিমারফিজমটি কভার করে আমি এড়িয়ে চলে যাই।
স্ট্রাকচারাল পলিমারফিজম (ওরফে স্ট্রুট্রাল সাব টাইপিং)
স্ট্রাকচারাল পলিমারফিজম বলে যে বিভিন্ন ধরণের সমতুল্য, যদি তাদের মধ্যে একই কাঠামো থাকে তবে এক প্রকারের মধ্যে অন্য একটির সমস্ত বৈশিষ্ট্য রয়েছে তবে এতে অতিরিক্ত বৈশিষ্ট্যও অন্তর্ভুক্ত থাকতে পারে। বলা হচ্ছে, স্ট্রাকচারাল পলিমারফিজম হ'ল সংকলনের সময় হাঁসের টাইপিং এবং অবশ্যই কিছু অতিরিক্ত ধরণের সুরক্ষা সরবরাহ করে। তবে দাবী করে যে দুটি মান একই ধরণের হয় কারণ তারা কিছু বৈশিষ্ট্য ভাগ করে, এটি মূল্যবোধের শব্দার্থক স্তরের বিষয়টি সম্পূর্ণ উপেক্ষা করে:
const weight = {value: 90, foo: true};
const speed = {value: 90, foo: false, bar: [1, 2, 3]};
দুর্ভাগ্যক্রমে, এর speed
একটি উপপ্রকার weight
হিসাবে বিবেচনা করা হয় এবং যত তাড়াতাড়ি আমরা value
বৈশিষ্ট্যগুলি তুলনামূলকভাবে কমলাগুলির সাথে আপেলকে তুলনা করি।