কম্পিউটার টিউটোরিয়াল

রুবিতে মাস্টার মেথড ডেলিগেশন:একটি ব্যবহারিক গাইড

প্রোগ্রামিংয়ে ডেলিগেশন বলতে প্রোগ্রামের এক অংশ থেকে অন্য অংশে একটি কাজ হস্তান্তর করাকে বোঝায়। এটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের একটি অপরিহার্য কৌশল, প্রতিটি বস্তু বা পদ্ধতি একটি নির্দিষ্ট কাজ বা আচরণের জন্য দায়ী তা নিশ্চিত করে পরিষ্কার, রক্ষণাবেক্ষণযোগ্য কোডকে শক্তিশালী করে।

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

এই নিবন্ধে, আমরা রুবিতে প্রতিনিধিত্ব অর্জনের তিনটি উপায়ে ডুব দেব:স্পষ্ট প্রতিনিধিত্ব ব্যবহার করে, Forwardable মডিউল, এবং ActiveSupport::Delegate (রেলের জন্য)।

চলুন শুরু করা যাক!

রুবিতে প্রতিনিধি দল

আসুন সুস্পষ্ট প্রতিনিধি নিয়ে আলোচনা করে শুরু করি — একটি পদ্ধতির মধ্যে একটি পদ্ধতিকে কল করা। তারপর আমরা বিল্ট-ইন Forwardable এক্সপ্লোর করব মডিউল এবং এটি কীভাবে প্রতিনিধিদের স্ট্রীমলাইন করতে পারে। অবশেষে, আমরা ActiveSupport::Delegate কভার করব , কিছু সুবিধা সহ একটি রেল-নির্দিষ্ট প্রতিনিধি টুল।

স্পষ্ট প্রতিনিধিত্ব

এর সহজতম আকারে, অন্য পদ্ধতির মধ্যে একটি পদ্ধতিকে স্পষ্টভাবে কল করে প্রতিনিধিত্ব অর্জন করা যেতে পারে। এই পদ্ধতিটি প্রায়শই ব্যবহার করা হয় যখন অর্পিত পদ্ধতিটি একটি পৃথক বস্তুর অন্তর্গত হয় বা যখন অর্পণটি যথেষ্ট সহজ হয় যাতে আরও উন্নত কৌশল ব্যবহার করা যায় না৷

রুবিতে স্পষ্ট প্রতিনিধিত্ব বাস্তবায়ন করা সোজা। চলুন একটি Printer এর উদাহরণ নেওয়া যাক ক্লাস যা পাঠ্য প্রিন্ট করতে একটি HP অবজেক্ট ব্যবহার করে:

 

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

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

অতিরিক্তভাবে, তৃতীয় পক্ষের লাইব্রেরির চারপাশে অ্যাডাপ্টার বা মোড়ক তৈরি করার সময় স্পষ্ট অর্পণ কার্যকর হতে পারে, কারণ এটি আপনাকে বাহ্যিক কোডের সাথে মিথস্ক্রিয়াকে আলাদা করতে দেয়।

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

রুবি'স ফরওয়ার্ডেবল মডিউল

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

ফরওয়ার্ডযোগ্য মডিউল দিয়ে শুরু করতে, এটিকে আপনার ক্লাসে অন্তর্ভুক্ত করুন এবং def_delegator ব্যবহার করুন এবংdef_delegators যথাক্রমে এক বা একাধিক পদ্ধতি অর্পণ করার পদ্ধতি। আসুন একটি নতুন Formatter সহ আমাদের প্রিন্টার উদাহরণটি আবার দেখুন ক্লাস করুন এবং ফরওয়ার্ডেবল মডিউলটি বাস্তবায়ন করুন:

 

উপরের উদাহরণে, আমরা def_delegator ব্যবহার করেছি ফরম্যাটার ক্লাস থেকে বিন্যাস পদ্ধতি অর্পণ করতে। আপনি যদি একবারে একাধিক পদ্ধতি অর্পণ করতে চান, আপনি def_delegators ব্যবহার করতে পারেন . উদাহরণস্বরূপ, যদি Formatter ক্লাসের অতিরিক্ত পদ্ধতি ছিল যেমন capitalize , আপনি তাদের এইভাবে অর্পণ করতে পারেন:

 

ফরওয়ার্ডযোগ্য মডিউল ব্যবহার করার সময়, বিবেচনা করার জন্য কয়েকটি গুরুত্বপূর্ণ সম্ভাব্য ত্রুটি রয়েছে:

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

ফরোয়ার্ডেবল মডিউল সম্পর্কে আরও গভীর তথ্যের জন্য, ফরওয়ার্ডযোগ্য ডকুমেন্টেশন দেখুন।

ActiveSupport::Delegate রেল অ্যাপ্লিকেশনের জন্য

ActiveSupport::Delegate রেল দ্বারা প্রদত্ত একটি ডেলিগেশন ইউটিলিটি, যা সংশ্লিষ্ট বস্তুতে অর্পণ করার পদ্ধতির জন্য একটি সংক্ষিপ্ত বাক্য গঠনের প্রস্তাব দেয়। যদিও এটি রুবির বিল্ট-ইন ফরওয়ার্ডেবল মডিউলের সাথে মিল রয়েছে, ActiveSupport::Delegate রেল অ্যাপ্লিকেশনের জন্য তৈরি করা অতিরিক্ত বিকল্প এবং বৈশিষ্ট্যগুলি অফার করে৷

ActiveSupport::Delegate ব্যবহার করতে , কেবল আপনার ক্লাসে প্রতিনিধি পদ্ধতিতে কল করুন এবং লক্ষ্য বস্তুর সাথে অর্পিত পদ্ধতি(গুলি) নির্দিষ্ট করুন। আসুন প্রিন্টার এবং ফরম্যাটার উদাহরণটি আবার দেখুন এবং ActiveSupport::Delegate ব্যবহার করে প্রতিনিধিত্ব প্রয়োগ করুন :

 

ActiveSupport::Delegate অতিরিক্ত বিকল্প এবং বৈশিষ্ট্যগুলি অফার করে যা বিভিন্ন পরিস্থিতিতে কার্যকর হতে পারে। উদাহরণস্বরূপ, আপনি :prefix ব্যবহার করতে পারেন অর্পিত পদ্ধতিতে একটি উপসর্গ প্রিপেন্ড করার বিকল্প। আপনি যদি একাধিক পদ্ধতি অর্পণ করতে চান তবে to: এর আগে তাদের তালিকা করুন বিকল্প:

 

এটি formatter_format এর মত পদ্ধতি তৈরি করে , formatter_bold , এবং formatter_italic Printer-এ ক্লাস, Formatter-এ সংশ্লিষ্ট পদ্ধতিতে অর্পণ করা ক্লাস।

ActiveSupport::Delegate সম্পর্কিত মডেল বা বস্তুর মধ্যে পদ্ধতি অর্পণ করতে সাধারণত বাস্তব-বিশ্বের রেল প্রকল্পগুলিতে ব্যবহৃত হয়। উদাহরণস্বরূপ, যদি আপনার একটি User থাকে মডেল যে belongs_to একটি সংস্থা, আপনি organization থেকে নাম পদ্ধতি অর্পণ করতে পারেন User এর মডেল এই মত মডেল:

 

এটি আপনাকে একটি ব্যবহারকারী বস্তুর মাধ্যমে সংস্থার নাম অ্যাক্সেস করতে দেয়:user.organization_name .

উপসংহারে, ActiveSupport::Delegate রেল অ্যাপ্লিকেশনগুলির জন্য একটি শক্তিশালী হাতিয়ার যা পদ্ধতিগুলির সংক্ষিপ্ত এবং অভিব্যক্তিপূর্ণ প্রতিনিধিত্ব সক্ষম করে। এর অতিরিক্ত বিকল্প এবং বৈশিষ্ট্যগুলি ব্যবহার করে, আপনি রক্ষণাবেক্ষণযোগ্য এবং সুসংগঠিত কোড তৈরি করতে পারেন যা রেল প্রকল্পগুলির প্রসঙ্গে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের নীতিগুলি মেনে চলে৷

ActiveSupport::Delegate সম্পর্কে আরও গভীর তথ্যের জন্য এবং সমস্ত উপলব্ধ বিকল্প, Rails ActiveSupport ডকুমেন্টেশন দেখুন।

অর্পণ কৌশলের তুলনা

সুস্পষ্ট অর্পণ হ'ল অর্পণ করার সবচেয়ে সহজ পদ্ধতি, ম্যানুয়ালি সংজ্ঞায়িত পদ্ধতির প্রয়োজন যা অর্পিত অবজেক্ট থেকে পছন্দসই পদ্ধতিগুলিকে কল করে৷ যদিও এই কৌশলটি সহজ এবং এর জন্য কোনও বাহ্যিক লাইব্রেরির প্রয়োজন নেই, তবে ক্রমবর্ধমান সংখ্যক পদ্ধতি অর্পণ করার সময় এটি খুব বেশি শব্দযুক্ত হতে পারে৷

ফরোয়ার্ডেবল মডিউল, রুবিতে তৈরি, পদ্ধতিগুলি অর্পণ করার জন্য আরও সুগমিত উপায় অফার করে৷ def_delegator ব্যবহার করে এবং def_delegators পদ্ধতি, আপনি সংক্ষিপ্তভাবে এক বা একাধিক পদ্ধতি অর্পণ করতে পারেন।

ActiveSupport::Delegate , Rails এর ActiveSupport লাইব্রেরির অংশ, পদ্ধতি প্রতিনিধিত্ব পরিচালনা করার জন্য একটি ঘোষণামূলক উপায় প্রদান করে। একটি পরিষ্কার সিনট্যাক্স এবং প্রিফিক্সিংয়ের মতো অতিরিক্ত বিকল্পগুলির সাথে, এটি একটি রেল প্রসঙ্গে একটি অভিব্যক্তিপূর্ণ সরঞ্জাম। স্পষ্ট প্রতিনিধিদের তুলনায়,ActiveSupport::Delegate বেশি অভিব্যক্তিপূর্ণ এবং কম শব্দভাষা, বিশেষ করে যখন একাধিক পদ্ধতি অর্পণ করা হয়। যাইহোক, এটির জন্য রেল প্রয়োজন, তাই এটি নন-রেল রুবিপ্রজেক্টের জন্য উপযুক্ত নয়৷

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

র্যাপিং আপ

স্পষ্ট প্রতিনিধিত্ব থেকে শুরু করে বিল্ট-ইন ফরওয়ার্ডেবল মডিউল বা রেল-নির্দিষ্টActiveSupport::Delegate ব্যবহার করা , প্রতিটি কৌশল তার অনন্য সুবিধা এবং সম্ভাব্য ত্রুটিগুলি অফার করে৷ আপনার বেছে নেওয়া কৌশলটি আপনার নির্দিষ্ট প্রেক্ষাপট, আপনার প্রকল্পের প্রকৃতি এবং আপনার ব্যক্তিগত কোডিং শৈলীর উপর নির্ভর করে৷

এই কৌশলগুলি বোঝা শুধুমাত্র আপনার রুবি প্রোগ্রামিং দক্ষতাকে প্রসারিত করে না বরং আপনাকে আরও মডুলার, পঠনযোগ্য এবং রক্ষণাবেক্ষণযোগ্য কোড লিখতে সজ্জিত করে। এই জ্ঞানের সাথে, আপনি বাকপটু ডিজাইনের সাথে জটিল সমস্যাগুলি মোকাবেলা করার জন্য আরও ভালভাবে প্রস্তুত৷

শুভ অর্পণ!

পি.এস. আপনি যদি রুবি ম্যাজিক পোস্টগুলি প্রেস থেকে বের হওয়ার সাথে সাথে পড়তে চান তবে আমাদের রুবি ম্যাজিক নিউজলেটারে সাবস্ক্রাইব করুন এবং একটি পোস্ট মিস করবেন না!

রুবিতে মাস্টার মেথড ডেলিগেশন:একটি ব্যবহারিক গাইড

জেফ মরহাস

আমাদের অতিথি লেখক Jeff Morhous একজন সফ্টওয়্যার ইঞ্জিনিয়ার কোড লিখছেন এবং রোগীদের তাদের প্রয়োজনীয় ওষুধ পেতে সাহায্য করার জন্য বাগ সংশোধন করছেন৷ আজকাল তিনি রুবি অন রেলের সাথে ওয়েব অ্যাপ্লিকেশন তৈরির দিকে মনোনিবেশ করেছেন, তবে অতীতে তিনি iOS এবং অ্যান্ড্রয়েড বিকাশের জন্য সুইফট, জাভা এবং কোটলিন ব্যবহার করেছেন৷

জেফ মরহাসের সমস্ত নিবন্ধ


  1. "ইম্পিডেন্স মিসম্যাচ টেস্ট":আপনার ডেটা প্ল্যাটফর্ম কি সহজ নাকি জটিল গোলযোগ?

  2. কিভাবে MS SQL সার্ভারে ডাটাবেস পুনরুদ্ধার করবেন

  3. HTML DOM ইনপুট লুকানো মান সম্পত্তি

  4. অ্যান্ড্রয়েড কনকারেন্টলিঙ্কডডিক-এ প্রথম উপাদান কীভাবে যুক্ত করবেন?