জাভাস্ক্রিপ্টে বহুমুখ কী?


92

পলিমারফিজমে ইন্টারনেটে আমি খুঁজে পেতে পারি এমন কিছু সম্ভাব্য নিবন্ধটি পড়েছি । তবে আমি মনে করি এর অর্থ এবং এর গুরুত্ব আমি যথেষ্ট বুঝতে পারি না। বেশিরভাগ নিবন্ধগুলি কেন এটি গুরুত্বপূর্ণ এবং আমি কীভাবে ওওপিতে (অবশ্যই জাভাস্ক্রিপ্টে) পলিমারফিক আচরণ অর্জন করতে পারি তা বলে না।

আমি কোনও কোড উদাহরণ সরবরাহ করতে পারি না কারণ এটি কীভাবে প্রয়োগ করা যায় সে সম্পর্কে আমার ধারণা নেই, সুতরাং আমার প্রশ্নগুলি নীচে রয়েছে:

  1. এটা কি?
  2. কেন আমাদের এটি দরকার?
  3. কিভাবে এটা কাজ করে?
  4. আমি জাভাস্ক্রিপ্টে এই বহুকর্মী আচরণটি কীভাবে অর্জন করতে পারি?

আমি এই উদাহরণ পেয়েছি। তবে এই কোডটির ফলাফল কী হবে তা সহজেই বোধগম্য। এটি পলিমারফিজম সম্পর্কে নিজেই কোনও পরিষ্কার ধারণা দেয় না।

function Person(age, weight) {
    this.age = age;
    this.weight = weight;
    this.getInfo = function() {
        return "I am " + this.age + " years old " +
        "and weighs " + this.weight +" kilo.";
    }
}
function Employee(age, weight, salary) {
    this.salary = salary;
    this.age = age;
    this.weight = weight;
    this.getInfo = function() {
        return "I am " + this.age + " years old " +
        "and weighs " + this.weight +" kilo " +
        "and earns " + this.salary + " dollar.";
    }
}

Employee.prototype = new Person();
Employee.prototype.constructor = Employee;
  // The argument, 'obj', can be of any kind
  // which method, getInfo(), to be executed depend on the object
  // that 'obj' refer to.

function showInfo(obj) {
    document.write(obj.getInfo() + "<br>");
}

var person = new Person(50,90);
var employee = new Employee(43,80,50000);
showInfo(person);
showInfo(employee);

এই প্রশ্নটি সম্ভবত স্ট্যাকওভারফ্লোতে ভালভাবে কাজ করার পক্ষে বিস্তৃত। আমরা যা করতে পারি তা হ'ল আপনাকে অন্য কিছু বহুবৈচিত্র্যের ব্যাখ্যাতে লিঙ্ক করা। নির্দিষ্ট সমস্যা সম্পর্কিত নির্দিষ্ট প্রশ্ন বা স্পষ্টির জবাব দেওয়ার ক্ষেত্রে স্ট্যাকওভারফ্লো সবচেয়ে ভাল, যেমন "উত্স বলেছিলেন বহুবর্ষটি এক্সওয়াইজেড, তবে ওয়াই এর অর্থ কী?"
ভিট্রুভিয়াস 21

4
তোমার দরকার নেই মোটেই এমনকি আপনার জেএসেও ক্লাসের প্রয়োজন নেই, এবং আসলে অ্যাপ্লিকেশন নির্মাণের জন্য আরও অনেকগুলি, যুক্তিযুক্তভাবে আরও ভাল, উদাহরণ। প্রয়োগ / কল / বাইন্ড একজাতীয়তার প্রয়োজনীয়তা হ্রাস করে এবং নরম-অবজেক্টের সাহায্যে আপনি প্রাক-সাজসজ্জা বা বিশেষ ক্ষেত্রে উত্তরাধিকার সূত্রে আপনার প্রয়োজন অনুসারে যে কোনও কিছু পরিবর্তন করতে পারেন।
ডান্ডাভিস

4
পলিমারফিজম কেবল ওও সম্পর্কিত নয় এবং এর অনেকগুলি অর্থ রয়েছে। আপনি উত্তরাধিকার ছাড়াই পলিমারফিজম পসিবল প্রশ্নগুলির নীচে এই অন্যান্য উত্তরটি পড়তে চাইতে পারেন ।
এডউইন ডালোরজো

উত্তরাধিকারী হওয়ার জন্য সাধারণত জাভাস্ক্রিপ্টে ভুলভাবে করা হয়। সন্তানের প্রোটোটাইপ হিসাবে প্যারেন্ট ব্যবহার করার জন্য একটি উদাহরণ তৈরি করতে কোনও অবজেক্টকে সংজ্ঞায়িত করতে ও তৈরিতে কনস্ট্রাক্টর ফাংশন এবং প্রোটোটাইপ যে ভূমিকা পালন করে তার ভূমিকা বোঝার অভাব দেখায়। এই উত্তরে আরও তথ্য পাওয়া যায়: stackoverflow.com/a/16063711/1641941
এইচএমআর

উত্তর:


99

পলিমারফিজম অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (ওওপি) এর অন্যতম উপকরণ। আচরণগুলি ভাগ করে নেওয়ার জন্য নির্দিষ্ট জিনিসগুলির সাথে ভাগ করা আচরণগুলিকে ওভাররাইড করতে সক্ষম হওয়াই এটি অভ্যাস। পলিমারফিজমটি ঘটতে যাতে উত্তরাধিকারের সুযোগ নেয়।

ওওপি-তে সমস্ত কিছুকে একটি বস্তু হিসাবে মডেল করা বিবেচনা করা হয়। এই বিমূর্তনটি কোনও গাড়ির বাদাম এবং বল্টে নেমে যেতে পারে, বা এক বছর, মেক এবং মডেল সহ কেবল কোনও গাড়ির ধরণের হিসাবে বিস্তৃত।

পলিমারফিক কারের দৃশ্যধারণের জন্য সেখানে বেস কারের ধরণ থাকবে এবং তারপরে এমন সাবক্লাস থাকবে যা গাড়ি থেকে উত্তরাধিকারী হবে এবং একটি গাড়ীর যেসব মৌলিক আচরণ রয়েছে তার উপরে তাদের নিজস্ব আচরণ প্রদান করবে। উদাহরণস্বরূপ, একটি সাবক্লাসটি টাউট্রাক হতে পারে যা এখনও এক বছরের মেক এবং মডেল থাকতে পারে তবে কিছু অতিরিক্ত আচরণ এবং বৈশিষ্ট্যও থাকতে পারে যা লিফটের স্পেসিফিকেশনগুলির মতো জটিল হিসাবে ইসটাউংয়ের পতাকার মতো মৌলিক হতে পারে।

মানুষ এবং কর্মচারীদের উদাহরণ ফিরে পাওয়া, সমস্ত কর্মচারী মানুষ, তবে সমস্ত লোক কর্মচারী নয়। যা বলা যায় যে লোকেরা সুপার ক্লাস হবে, এবং সাব-ক্লাস কর্মী হবে। মানুষের বয়স এবং ওজন থাকতে পারে তবে তাদের বেতন নেই। কর্মচারী ব্যক্তিরা তাই তাদের জন্মগত ওজন এবং মজবুতভাবে থাকবে তবে তারা কর্মী হওয়ায় তাদের বেতনও হবে।

সুতরাং এটির সুবিধার্থে আমরা প্রথমে সুপার ক্লাস (ব্যক্তি) লিখব

function Person(age,weight){
 this.age = age;
 this.weight = weight;
}

এবং আমরা ব্যক্তিকে তাদের তথ্য ভাগ করে নেওয়ার ক্ষমতা দেব

Person.prototype.getInfo = function(){
 return "I am " + this.age + " years old " +
    "and weighs " + this.weight +" kilo.";
};

পরবর্তী আমরা ব্যক্তি, কর্মচারী একটি সাবক্লাস চাই

function Employee(age,weight,salary){
 this.age = age;
 this.weight = weight;
 this.salary = salary;
}
Employee.prototype = new Person();

এবং আমরা getInfo এর আচরণটি এমন একটি সংজ্ঞায়নের মাধ্যমে অগ্রাহ্য করব যা কোনও কর্মচারীর পক্ষে আরও উপযুক্ত

Employee.prototype.getInfo = function(){
 return "I am " + this.age + " years old " +
    "and weighs " + this.weight +" kilo " +
    "and earns " + this.salary + " dollar.";  
};

এগুলি আপনার মূল কোড ব্যবহারের মতো ব্যবহার করা যেতে পারে

var person = new Person(50,90);
var employee = new Employee(43,80,50000);

console.log(person.getInfo());
console.log(employee.getInfo());

তবে, এখানে উত্তরাধিকার ব্যবহার করে খুব বেশি কিছু অর্জিত হয়নি কারণ কর্মচারীর নির্মাতা ব্যক্তির সাথে একই রকম এবং প্রোটোটাইপের একমাত্র ফাংশন ওভাররাইড করা হচ্ছে। পলিমারফিক ডিজাইনের ক্ষমতা আচরণগুলি ভাগ করে নেওয়া।


4
@ ব্যবহারকারী3138436 - এটি সঠিক। প্রোটোটাইপাল চেইনটি প্রথম ঘটনার জন্য পরিদর্শন করা getInfoহবে যা ব্যক্তির চেয়ে চেইনে উচ্চতর হওয়ায় এটি কর্মচারী হবে। আমি যখন "ওভাররাইড" বলছিলাম তখন এটাই আমার অর্থ ছিল।
ট্র্যাভিস জে

17
আপনি কনস্ট্রাক্টর (পার্সন.ক্যাল (এটি, আরগ)) ব্যবহার করছেন না এবং কোনও ব্যক্তির উদাহরণে কর্মচারী প্রোটোটাইপ সেট করছেন না। প্রোটোটাইপ যেখানে ভাগ করা সদস্যরা যান এবং কনস্ট্রাক্টর ফাংশন সেখানে উদাহরণ সুনির্দিষ্ট সদস্য তৈরি হয়। আপনার নমুনাগুলি কন্সট্রাক্টর ফাংশনটির পুনরায় কপি পেস্ট কোড ব্যবহার করে এবং প্রোটোটাইপ অংশটি ভুল উত্তরাধিকারী (ব্যক্তির উদাহরণস্বরূপ নির্দিষ্ট সদস্য রয়েছে যার কর্মচারী নেই pr কনস্ট্রাক্টর ফাংশন এবং প্রোটোটাইপ ব্যবহার করে উত্তরাধিকার সম্পর্কে আরও তথ্য: stackoverflow.com/a/16063711/1641941
এইচএমআর

4
কর্মচারী পুনরায় ব্যবহার এবং ব্যক্তির getinfo প্রসারিত করার জন্য এটি return Person.prototype.getInfo.call(this) + + "and earns " + this.salary + " dollar.";অনুলিপি পেস্ট কোড পুনরায় ব্যবহারের পরিবর্তে সহজেই করতে পারে।
এইচএমআর

4
এখানে পলিমারফিজম কোথায় প্রয়োগ করা হয়েছে?
অ্যালবার্ট জেগানি

4
@rpeg পলিমারফিজমের পয়েন্টটি ওপিএসের উদাহরণে আরও ভাল দেখা যায়। ফাংশন showInfo (); একটি সাধারণ বিষয় গ্রহণ করে। বহুবর্ষ এখন বস্তুর ধরণের উপর নির্ভর করে ভিন্নভাবে প্রতিক্রিয়া জানানোর ক্ষমতা। আমি মনে করি এই উত্তরটি এটি যথেষ্ট পরিষ্কার করে না, যেহেতু এটি প্রতিটি নির্দিষ্ট বস্তুতে getInfo () কল করে।
স্টিফান

26

এই অন্যান্য উত্তরে যেমন ব্যাখ্যা করা হয়েছে , বহুবর্ষের বিভিন্ন ব্যাখ্যা রয়েছে।

আমি যে বিষয়টি কখনও পড়েছি তার সর্বোত্তম ব্যাখ্যা হ'ল খ্যাতিসম্পন্ন তাত্ত্বিক লুকা কার্ডেলির একটি নিবন্ধ । নিবন্ধটির নাম দেওয়া হয়েছে বোঝার ধরণ, ডেটা বিমূর্তি এবং পলিমারফিজম

এটা কি?

কার্ডেলি এই নিবন্ধে বহু ধরণের বহুবর্ষকে সংজ্ঞায়িত করেছেন:

  • সর্বজনীন
    • প্যারামেট্রিক
    • অন্তর্ভুক্তি
  • অ্যাড-হক
    • ওভারলোডিং
    • জবরদস্তি

সম্ভবত জাভাস্ক্রিপ্টে, পলিমার্ফিজমের প্রভাবগুলি দেখা কিছুটা বেশি কঠিন কারণ স্ট্যাটিক টাইপ সিস্টেমে আরও ধ্রুপদী ধরণের বহুবর্ণবাদ আরও স্পষ্ট হয়, তবে জাভাস্ক্রিপ্টে একটি গতিশীল টাইপ সিস্টেম রয়েছে।

সুতরাং, উদাহরণস্বরূপ, জাভাস্ক্রিপ্টে সংকলন করার সময় কোনও পদ্ধতি বা ফাংশন ওভারলোডিং বা স্বয়ংক্রিয় ধরণের চাপ নেই। গতিশীল ভাষায়, আমরা এই জিনিসগুলির বেশিরভাগটিকে সম্মানজনক বলে বিবেচনা করি। ভাষার গতিশীল প্রকৃতির কারণে আমাদের জাভাস্ক্রিপ্টে প্যারামেট্রিক পলিমারফিজমের মতো কিছু দরকার নেই।

তবুও, জাভাস্ক্রিপ্টের মধ্যে এক ধরণের উত্তরাধিকার রয়েছে যা জাভা বা সি # এর মতো অন্যান্য অবজেক্ট-ভিত্তিক প্রোগ্রামিং ভাষায় আমরা সাধারণত যা করি তার অনুরূপ উপধারা পলিমারফিজম (উপরের কার্ডেলি দ্বারা অন্তর্ভুক্তি বহুত্ববাদ হিসাবে শ্রেণিবদ্ধ) একই ধারণার অনুকরণ করে in অন্য উত্তর আমি উপরে ভাগ করে নিলাম)।

গতিশীল ভাষাগুলিতে খুব সাধারণভাবে বহুল ব্যবহৃত পলিমারফিজমের আরও একটি রূপকে হাঁসের টাইপিং বলা হয় ।

এটা বিশ্বাস করা ভুল যে পলিমারফিজম কেবল অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের সাথে সম্পর্কিত। অন্যান্য প্রোগ্রামিং মডেল (ফাংশনাল, প্রসেসরিয়াল, লজিক ইত্যাদি) তাদের টাইপ সিস্টেমে বিভিন্ন ধরণের পলিমারফিজম সরবরাহ করে, সম্ভবত এটি কেবল ওওপি ব্যবহার করা লোকদের জন্য কিছুটা অপরিচিত।

আমাদের এটির প্রয়োজন কেন?

পলিমারফিজম সফ্টওয়্যারটিতে অনেকগুলি ভাল গুণাবলীকে উত্সাহিত করে, অন্যান্য জিনিসের মধ্যে এটি মডুলারিটি এবং পুনরায় ব্যবহারযোগ্যতা বৃদ্ধি করে এবং টাইপ সিস্টেমটিকে আরও নমনীয় এবং ম্যালেবল করে তোলে। এটি ব্যতীত, প্রকারগুলি সম্পর্কে যুক্তি করা সত্যিই কঠিন হবে। পলিমারফিজম নিশ্চিত করে যে এক প্রকারের সাথে অন্যান্য সামঞ্জস্যপূর্ণ ব্যক্তিরা তাদের সার্বজনীন ইন্টারফেসটি সন্তুষ্ট করতে পারে তার পরিবর্তে এটি প্রতিস্থাপন করতে পারে, সুতরাং এটি তথ্য গোপন এবং মডুলারালিটিকেও উত্সাহ দেয়।

এটা কিভাবে কাজ করে?

এটি উত্তর দেওয়া সহজ নয়, বিভিন্ন ভাষায় এটি প্রয়োগের বিভিন্ন উপায় রয়েছে। জাভাস্ক্রিপ্টের ক্ষেত্রে, উপরে উল্লিখিত হিসাবে, আপনি প্রোটোটাইপাল উত্তরাধিকার ব্যবহার করে টাইপ হায়ারার্কিগুলির আকারে এটি বাস্তবায়ন করতে দেখবেন এবং আপনি হাঁসের টাইপিং ব্যবহার করে এটি ব্যবহার করতে পারেন।

বিষয়টি কিছুটা বিস্তৃত এবং আপনি একটি পোস্টে দুটি আরও প্রশ্ন খুললেন। সম্ভবত এটি সেরা যে আপনি কার্ডেলির কাগজটি পড়া শুরু করে এবং তারপরে কোনও ভাষা বা প্রোগ্রামিংয়ের দৃষ্টান্ত নির্বিশেষে বহুসত্ত্ব বুঝতে চেষ্টা করুন, তারপরে আপনি তাত্ত্বিক ধারণা এবং জাভাস্ক্রিপ্টের মতো কোনও বিশেষ ভাষা কী এই ধারণাগুলি বাস্তবায়নের জন্য অফার করেছে তাগুলির মধ্যে সমিতি তৈরি করা শুরু করবেন।


14

পলিমারফিজমের উদ্দেশ্য কী?

পলিমারফিজম ধরণের সমতুল্যের জন্য শর্তটি শিথিল করে স্থিতিশীল প্রকারের সুরক্ষা না হারিয়ে (উল্লেখযোগ্য) স্ট্যাটিক টাইপ সিস্টেমকে আরও নমনীয় করে তোলে। প্রমাণটি রয়ে গেছে যে কোনও প্রোগ্রাম কেবল তখনই চলবে যদি এতে কোনও ধরণের ত্রুটি থাকে না।

পলিমারফিক ফাংশন বা ডেটা টাইপ মনোমोर्ফিকের চেয়ে বেশি সাধারণ, কারণ এটি দৃশ্যের বিস্তৃত পরিসরে ব্যবহার করা যেতে পারে। এই অর্থে বহুবর্ষবাদ কঠোরভাবে টাইপ করা ভাষায় সাধারণীকরণের ধারণাকে উপস্থাপন করে।

এটি জাভাস্ক্রিপ্টে কীভাবে প্রযোজ্য?

জাভাস্ক্রিপ্ট একটি দুর্বল, গতিশীল টাইপ সিস্টেম আছে। এই জাতীয় ধরণের সিস্টেমটি কেবলমাত্র এক প্রকারযুক্ত একটি কঠোর প্রকারের সিস্টেমের সমতুল্য। আমরা এই জাতীয় প্রকারকে একটি বিশাল ইউনিয়নের ধরণ (সিউডো সিনট্যাক্স) হিসাবে ভাবতে পারি:

type T =
 | Undefined
 | Null
 | Number
 | String
 | Boolean
 | Symbol
 | Object
 | Array
 | Map
 | ...

প্রতিটি মান রান-টাইমে এই জাতীয় বিকল্পগুলির একটির সাথে যুক্ত হবে। এবং যেহেতু জাভাস্ক্রিপ্ট দুর্বলভাবে টাইপ করা হয়েছে, তাই প্রতিটি মান তার প্রকারকে যে কোনও সংখ্যক বার পরিবর্তন করতে পারে।

যদি আমরা কোনও ধরণের তাত্ত্বিক দৃষ্টিভঙ্গি গ্রহণ করি এবং কেবলমাত্র এক প্রকারের বিষয়টি বিবেচনা করি তবে আমরা দৃ certain়তার সাথে বলতে পারি যে জাভাস্ক্রিপ্টের টাইপ সিস্টেমে পলিমারফিজমের ধারণা নেই। পরিবর্তে আমাদের কাছে হাঁসের টাইপিং এবং অন্তর্নিহিত ধরণের জবরদস্তি রয়েছে।

তবে এটি আমাদের আমাদের প্রোগ্রামগুলির ধরণের সম্পর্কে চিন্তাভাবনা থেকে বিরত থাকা উচিত নয়। জাভাস্ক্রিপ্টে প্রকারের অভাবের কারণে কোডিং প্রক্রিয়া চলাকালীন আমাদের সেগুলি নির্ধারণ করা দরকার। আমাদের মন অনুপস্থিত সংকলকটির জন্য দাঁড়াতে হবে, অর্থাত্ কোনও প্রোগ্রামের দিকে নজর দেওয়ার সাথে সাথে অবশ্যই আমাদের অবশ্যই অ্যালগোরিদমগুলি নয়, অন্তর্নিহিত (সম্ভবত পলিমারফিক) প্রকারগুলিও সনাক্ত করতে হবে। এই ধরণেরগুলি আরও নির্ভরযোগ্য এবং আরও শক্তিশালী প্রোগ্রামগুলি তৈরি করতে আমাদের সহায়তা করবে।

এটি যথাযথভাবে করার জন্য আমি আপনাকে বহুকর্মের সবচেয়ে সাধারণ প্রকাশগুলির একটি ওভারভিউ দিতে যাচ্ছি।

প্যারামেট্রিক পলিমারফিজম (ওরফে জেনেরিকস)

প্যারামেট্রিক পলিমারফিজম বলে যে বিভিন্ন ধরণের বিনিময়যোগ্য কারণ প্রকারগুলিতে মোটেই গুরুত্বপূর্ণ নয়। একটি ফাংশন যা প্যারামেট্রিক পলিমারফিক ধরণের এক বা একাধিক পরামিতিগুলি সংজ্ঞায়িত করে সেগুলি সম্পর্কিত যুক্তিগুলি সম্পর্কে কিছু জানতে হবে না তবে সেগুলি একইরকম আচরণ করবে, কারণ তারা যে কোনও ধরণের অবলম্বন করতে পারে। এটি বেশ সীমাবদ্ধ, কারণ এই জাতীয় ফাংশনটি কেবলমাত্র তার তথ্যগুলির অংশ নয় এমন আর্গুমেন্টগুলির বৈশিষ্ট্যগুলির সাথে কাজ করতে পারে:

// parametric polymorphic functions

const id = x => x;

id(1); // 1
id("foo"); // "foo"

const k = x => y => x;
const k_ = x => y => y;

k(1) ("foo"); // 1
k_(1) ("foo"); // "foo"

const append = x => xs => xs.concat([x]);

append(3) ([1, 2]); // [1, 2, 3]
append("c") (["a", "b"]); // ["a", "b", "c"]

অ্যাডহক পলিমারফিজম (ওরফে ওভারলোডিং)

অ্যাডহক পলিমারফিজম বলে যে বিভিন্ন ধরণের শুধুমাত্র একটি নির্দিষ্ট উদ্দেশ্যে সমতুল্য। এই অর্থে সমতুল্য হতে একটি ধরণের অবশ্যই সেই উদ্দেশ্যে নির্দিষ্ট ফাংশনের একটি সেট বাস্তবায়ন করতে হবে। এমন একটি ফাংশন যা অ্যাড-হক পলিমারফিক ধরণের এক বা একাধিক পরামিতিগুলি সংজ্ঞায়িত করে তারপরে কোন ফাংশনগুলির সেটগুলি তার প্রতিটি আর্গুমেন্টের সাথে জড়িত তা জানতে হবে।

অ্যাড-হক পলিমারফিজম একটি ফাংশনকে ধরণের বৃহত ডোমেনের সাথে সামঞ্জস্য করে। নিম্নলিখিত উদাহরণটি "মানচিত্রের ওভার" উদ্দেশ্য এবং কীভাবে প্রকারগুলি এই সীমাবদ্ধতাটি প্রয়োগ করতে পারে তা চিত্রিত করে। ফাংশনের একটি সেট পরিবর্তে "ম্যাপেবল" সীমাবদ্ধতায় কেবল একটি একক mapফাংশন অন্তর্ভুক্ত থাকে:

// Option type
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();
  }
};


// ad-hoc polymorphic function
const map = f => t => t.map(f, t);

// helper/data

const sqr = x => x * x;

const xs = [1, 2, 3];
const x = new Some(5);
const y = new None();

// application

console.log(
  map(sqr) (xs) // [1, 4, 9]
);

console.log(
  map(sqr) (x) // Some {x: 25}
);

console.log(
  map(sqr) (y) // None {}
);

সাব টাইপ পলিমারফিজম

যেহেতু অন্যান্য উত্তর ইতিমধ্যে সাব টাইপ পলিমারফিজমটি কভার করে আমি এড়িয়ে চলে যাই।

স্ট্রাকচারাল পলিমারফিজম (ওরফে স্ট্রুট্রাল সাব টাইপিং)

স্ট্রাকচারাল পলিমারফিজম বলে যে বিভিন্ন ধরণের সমতুল্য, যদি তাদের মধ্যে একই কাঠামো থাকে তবে এক প্রকারের মধ্যে অন্য একটির সমস্ত বৈশিষ্ট্য রয়েছে তবে এতে অতিরিক্ত বৈশিষ্ট্যও অন্তর্ভুক্ত থাকতে পারে। বলা হচ্ছে, স্ট্রাকচারাল পলিমারফিজম হ'ল সংকলনের সময় হাঁসের টাইপিং এবং অবশ্যই কিছু অতিরিক্ত ধরণের সুরক্ষা সরবরাহ করে। তবে দাবী করে যে দুটি মান একই ধরণের হয় কারণ তারা কিছু বৈশিষ্ট্য ভাগ করে, এটি মূল্যবোধের শব্দার্থক স্তরের বিষয়টি সম্পূর্ণ উপেক্ষা করে:

const weight = {value: 90, foo: true};
const speed =  {value: 90, foo: false, bar: [1, 2, 3]};

দুর্ভাগ্যক্রমে, এর speedএকটি উপপ্রকার weightহিসাবে বিবেচনা করা হয় এবং যত তাড়াতাড়ি আমরা valueবৈশিষ্ট্যগুলি তুলনামূলকভাবে কমলাগুলির সাথে আপেলকে তুলনা করি।


4
যদিও এটি স্বীকৃত উত্তরের চেয়ে অনেক ক্ষেত্রেই আরও সঠিক (এবং অবশ্যই আরও নিখুঁত) রয়েছে তবে এর একই অ্যাক্সেসিবিলিটি নেই: এই উত্তরটি ধরেই নিয়েছে যে প্রশ্নটি ইতিমধ্যে প্রশ্নটির সাথে বিরক্ত করার জন্য প্রশ্নকর্তা ইতিমধ্যে স্মার্ট :)
জারেড স্মিথ

@ জ্যারেডস্মিথ আমি অনুচ্ছেদে কিছু সহজ অনুচ্ছেদে বিষয়টিকে সিদ্ধ করার চেষ্টা করেছি। তবে যত গভীর হয় ততই তত গভীর ড্রিল করি। আমি টাইপযুক্ত ভাষাগুলিতে পলিমারফিজমের কোনও ভাল উত্স খুঁজে পাইনি, সুতরাং আমি মনে করি এই উত্তরটি তবুও মূল্যবান।

সম্পাদনাটি অ্যাক্সেসযোগ্যতার ব্যাপক উন্নতি করে। গতিশীল ভাষাগুলিতে পলিমারফিজমের উপযোগিতা হিসাবে, প্রচুর পরিমাণে রয়েছে তবে আমি জেএসে একটি ভাল উদাহরণ বিবেচনা করার জন্য লড়াই করছি। এর চেয়ে ভাল উদাহরণ পাইথনের যাদু পদ্ধতি যা ব্যবহারকারী-সংজ্ঞায়িত প্রকারগুলিকে পলিমারফিক ফাংশনগুলির সাথে কাজ করতে দেয় len। অথবা সম্ভবত conjক্লোজার থেকে।
জারেড স্মিথ

8

এটা কি?

পলি = অনেকগুলি, মরফিজম = ফর্ম বা আচরণের স্থানান্তর।

কেন আমাদের এটি দরকার?

প্রোগ্রামিংয়ে এটি ব্যবহার করা হয় যখন আমরা কোনও ফাংশনের (বলি ফাংশন এক্স এর) ইন্টারফেসটি বিভিন্ন ধরণের বা পরামিতির সংখ্যা গ্রহণ করার জন্য যথেষ্ট নমনীয় হতে চাই want এছাড়াও, পরামিতিগুলির ধরণ বা সংখ্যার পরিবর্তনের ভিত্তিতে আমরা এক্স ক্রিয়াকলাপটি আলাদাভাবে আচরণ করতে চাই (বর্ণবাদ)।

কিভাবে এটা কাজ করে?

আমরা এক্স ফাংশনের একাধিক বাস্তবায়ন লিখি যেখানে প্রতিটি প্রয়োগ বিভিন্ন প্যারামিটারের ধরন বা পরামিতির সংখ্যা গ্রহণ করে। প্যারামিটারের ধরণ বা সংখ্যার উপর ভিত্তি করে, সংকলক (রানটাইম সময়ে) সিদ্ধান্ত নেয় যে কোনও কোড থেকে এক্স ডাকলে এক্স প্রয়োগকরণ কার্যকর করা উচিত।

আমি জাভাস্ক্রিপ্টে এই বহুতল আচরণটি কীভাবে অর্জন করতে পারি?

জেএস কোনও টাইপ করা ভাষা নয় তাই এটি পলিমারফিজমের মতো ওওপি ধারণাটি ব্যবহার করার পক্ষে আসলেই বোঝায় না। যাইহোক, জেএস এর নতুন সংস্করণে এখন ক্লাস অন্তর্ভুক্ত রয়েছে এবং এমন সম্ভাবনা রয়েছে যে জেএসেও পলিমোসফিজমটি বোঝা শুরু করতে পারে। অন্যান্য উত্তরগুলি কিছু আকর্ষণীয় কাজের সুযোগ দেয়।


4

পলিমারফিজম অর্থ বিভিন্ন বস্তুগুলিতে একই পদ্ধতি কল করার ক্ষমতা এবং প্রতিটি বস্তু বিভিন্ন উপায়ে প্রতিক্রিয়া জানায় তাকে পলিমারফিজম বলে

    function Animal(sound){
    this.sound=sound;
    this.speak=function(){
    			return this.sound;
    	}
    }
//one method 
    function showInfo(obj){
    		console.log(obj.speak());
    }
//different objects
    var dog = new Animal("woof");
    var cat = new Animal("meow");
    var cow = new Animal("humbow");
//responds different ways
    showInfo(dog);
    showInfo(cat);
    showInfo(cow);


2

জাভাস্ক্রিপ্ট একটি অনুবাদিত ভাষা, সংকলিত ভাষা নয়।

সংকলনের সময় পলিমারহিজম (বা স্ট্যাটিক পলিমারফিজম) সংকলন পলিমারফিজম জাভা, সি ++ এ পদ্ধতি ওভারলোডিং ছাড়া কিছুই নয়

সুতরাং জাভাস্ক্রিপ্টে পদ্ধতি ওভারলোডিং সম্ভব নয় is

তবে ডায়নামিক (রান টাইম) পলিমারফিজম হ'ল পলিমারফিজম রান-টাইমে বিদ্যমান তাই জাভাস্ক্রিপ্টে মেথড ওভাররাইডিং সম্ভব

আর একটি উদাহরণ পিএইচপি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.