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

রুবি মাস্টারিং: মেথড এলিয়াস তৈরি করার জন্য Alias কিওয়ার্ড ব্যবহার

রুবিতে একটি মেথডের বিকল্প নাম দেওয়ার দুটি উপায় রয়েছে:

  • alias (কিওয়ার্ড)
  • alias_method

এই দুটি একই কাজ করে কিন্তু কিছুটা ভিন্নভাবে, তাই এটি একটি বিভ্রান্তিকর বিষয় হতে পারে।

নিচের চিত্রটি পার্থক্যগুলোর সারসংক্ষেপ:

রুবি মাস্টারিং: মেথড এলিয়াস তৈরি করার জন্য Alias কিওয়ার্ড ব্যবহার

আসুন এই পার্থক্যগুলো বিস্তারিতভাবে জানি যাতে বিষয়টি সুন্দরভাবে বোঝা যায়!

alias কিওয়ার্ড

প্রথমত alias আছে, যা একটি রুবি কিওয়ার্ড (যেমন if, def, class ইত্যাদি)।

এটি এমন দেখায়:

 alias print_something puts print_something 1 

এখন print_something কল করলে সেটি puts কল করার সমান।

alias একটি কিওয়ার্ড হওয়ায় এর কিছু đặcস্ব বর্ণনা রয়েছে:

  • বিশেষ সিনট্যাক্স রয়েছে
  • কোডে যেকোনো জায়গায় ব্যবহার করা যায়
  • গ্লোবাল ভেরিয়েবল এলিয়াস করা যায় (এটি করবেন না!)

alias-এর বৈধ ফর্মগুলো হলো:

  • alias a b
  • alias :a :b
  • alias :"#{}":b

লক্ষ্য করুন আর্গুমেন্টগুলোর মধ্যে কোনো কমা নেই সাধারণ মেথডের মতো।

রুবি a এবং b উভয়কেই বৈধ মেথড নাম আশা করে, ভেরিয়েবল এখানে কাজ করে না। আপনি যদি ভেরিয়েবল ব্যবহার করতে চান তবে নিচের মতো করতে হবে…

উদাহরণ:

 a = :print_something b = :puts alias :"#{a}" :"#{b}" 

এটি দেখতে খারাপ লাগে, তাই ডাইনামিক মেথড নামের জন্য alias_method ব্যবহার করা ভালো।

alias_method মেথড

পরবর্তী:

alias_method আছে, যা Module-এ সংজ্ঞায়িত একটি মেথড।

এই মেথডটি শুধু ক্লাস ও মডিউল লেভেলে ব্যবহার করা যায়, ইনস্ট্যান্স মেথডের ভিতরে নয়।

ডকুমেন্টেশন থেকে বর্ণনা:

alias_method: "নতুন_নামকে পুরনো_নাম মেথডের একটি নতুন কপি করে। এটি ওভাররাইড করা মেথডগুলোর অ্যাক্সেস রাখতে ব্যবহার করা যায়।"

উদাহরণ:

 class Foo alias_method :print_something, :puts end 

এটি Foo ক্লাসের ভিতরে print_something-কে puts-এর সাথে এলিয়াস করবে।

alias_method-এ স্ট্রিং আর্গুমেন্ট হিসেবে ব্যবহার করা যায়।

উদাহরণ:

 class Foo alias_method "print_something", "puts" end 

alias বনাম alias_method

আপনি alias এবং alias_method-এর ওভারভিউ দেখেছেন।

কিন্তু পার্থক্যগুলো কখন প্রাসঙ্গিক হয়?

  1. যখন আপনি ডাইনামিক্যালি জেনারেট করা মেথড নামের জন্য এলিয়াস ডিফাইন করেন (যেমন "abc#{rand}")
  2. যখন আপনি একটি মেথডের ভিতরে এলিয়াস ডিফাইন করেন

ডাইনামিক্যালি জেনারেট করা মেথড নামের জন্য এলিয়াস ডিফাইন করা alias কিওয়ার্ড দিয়ে সম্ভব কিন্তু আপনাকে ইন্টারপোলেটেড সিম্বল ব্যবহার করতে হবে।

alias_method-এ আপনাকে বেশি নমনীয় আর্গুমেন্ট मिलে।

উদাহরণ:

 class Cat def speak "meow" end alias_method "#{name.downcase}_speak", :speak end p Cat.new.cat_speak # "meow" 

এখন:

যদি আপনি একটি মেথডের ভিতরে এলিয়াস ডিফাইন করতে চান তবে এই এরর পাবেন:

 undefined method 'alias_method' for # (NoMethodError) 

কারণ আপনি একটি অবজেক্টের ভিতরে কাজ করছেন, ক্লাসে নয়!

একটি ইনস্ট্যান্স মেথডের ভিতরে আপনার Module-এ সংজ্ঞায়িত মেথডগুলোর অ্যাক্সেস নেই, যেখানে alias_method সংজ্ঞায়িত।

এখানে একটি সম্ভাব্য সমাধান:

 def enable_aliased_methods self.class.send(:alias_method, :x, :testing) end 

alias ব্যবহার করে:

 def enable_aliased_methods alias :x :testing end 

একটি গুরুত্বপূর্ণ পার্থক্য:

  • alias দ্বারা ডিফাইন করা মেথডটি সেটি ক্লাসের অন্তর্গত হবে যেখানে alias ব্যবহৃত হয়েছে
  • alias_method দ্বারা ডিফাইন করা মেথডটি self-এর অন্তর্গত হবে, অর্থাৎ কোড রান হওয়ার সময় বর্তমান ক্লাস

এটি কেন গুরুত্বপূর্ণ:

যদি আপনি একটি পেরেন্ট ক্লাসের মেথড কল করেন যা alias কিওয়ার্ড ব্যবহার করে…

তবে এলিয়াসিং পেরেন্ট ক্লাসে হবে, نه যে ক্লাসটি মেথডটি কল করছে।

উদাহরণ:

 class Food def create_alias alias print_on_screen puts end end class Apple < Food end Apple.new.create_alias 

কিন্তু আপনি যদি alias_method ব্যবহার করেন তবে মেথডটি শুধু Apple-এ এলিয়াস হবে।

এলিয়াসিং মেথডের একটি কপি তৈরি করে

alias_method এবং alias (keyword)-এর বর্ণনা অনুযায়ী, রুবি মেথডের একটি কপি তৈরি করে।

এটি শুধু একটি নতুন নাম নয়।

বরং মেথডের একটি আসল কপি।

এটির কিছু ব্যবহারিক پیام naj:

 def bacon 123 end alias :x :bacon x # 123 bacon # 123 

সেজন্য আমরা x-কে bacon-এর সাথে এলিয়াস করলাম, এখন দেখি যদি আমি bacon-কে পুনর্নির্দেশ করি তখন কী হয়:

 def bacon 234 end x # 123 bacon # 234 

x মেথডটি একই থাকে, কিন্তু bacon নতুন মান রিটার্ন করে!

যদি আপনি এলিয়াস করার পর মডিউল আপনার ক্লাসে ইনক্লুড করেন তবে এটি আশ্চর্য করতে পারে।

ভিডিও টিউটোরিয়াল

সারসংক্ষেপ

সাধারণত আমি alias_method পছন্দ করি কারণ এটি একটি আসল মেথড।

যখন alias কিওয়ার্ডের কিছু বিশেষ বৈশিষ্ট্য আছে যা আপনাকে মনে রাখতে হবে।

আপনি কি নতুন কিছু শিখলেন?

এই আর্টিকেলটি আপনার রুবি বন্ধুদের সাথে শেয়ার করুন যাতে 그들도 শিখতে পারেন!


  1. রুবির `select` মেথড মাস্টার করুন: প্র্যাক্টিক্যাল উদাহরণ ও ব্যবহার গাইড

  2. রুবি Enumerable মেথড মাস্টারিং: Any, All, None এবং One

  3. রুবির grep মেথড মাস্টারিং: কোড উদাহরণসহ একটি ব্যবহারিক গাইড

  4. রুবির Map মেথড মাস্টারিং: উদাহরণসহ একটি ব্যবহারিক গাইড