রুবিতে super কিওয়ার্ড কী করে?
এটি পেরেন্ট ক্লাসে একটি মেথড কল করে যেটির নাম একই যে মেথডটি super কল করছে।
উদাহরণস্বরূপ:
আপনি যদি i_like_chocolate নামক একটি মেথড কল করেন, এবং তারপর সেটির ভিতরে super কল করেন, তবে রুবি সেই মেথডের ওনারउस পেরেন্ট ক্লাসে একই নামে আরেকটি মেথড খুঁজে বের করার চেষ্টা করবে।
এটি ক্লাস আনসেস্ট্রি চেইনের মাধ্যমে উপরে বাবল আপ করে যেমন একটি রেগুলার মেথড কল।
যদি মেথডটি না থাকে তবে এটি একটি NoMethodError এক্সেপশন ট্রিগার করবে, এবং যদি method_missing পাওয়া যায় তবে সেটি ব্যবহার করবে।
এখন:
আসুন কয়েকটি কোড উদাহরণ দেখি!
আর্গুমেন্ট ছাড়া Super
নিচের উদাহরণে আমাদের একটি Cat ক্লাস আছে যা Animal- থেকে ইনহেরিট করেছে।
Cat ক্লাসের একটি name মেথড আছে যা super ব্যবহার করে তার পেরেন্ট ক্লাস (Animal)-এ একই মেথড কল করে।
এখানে কোড:
class Animal def name puts "Animal" end end class Cat < Animal def name super end end cat = Cat.new cat.name # "Animal"
রুবি super কিওয়ার্ড আর্গুমেন্টসহ বা আর্গুমেন্টসহ না ব্যবহার করা হলে ভিন্নভাবে behave করে।
আর্গুমেন্ট ছাড়া:
এটি অরিজিনাল মেথড কলের জন্য ব্যবহৃত আর্গুমেন্টগুলো নতুন মেথডে পাস করবে, কিওয়ার্ড আর্গুমেন্ট এবং ব্লক সহ যদি দেওয়া থাকে।
এখানে একটি উদাহরণ:
def puts(*) super end puts 1, 2, 3
এই মেথডটি, যেকোনো ক্লাসের বাইরে ডিফাইন করা, Object-এ बिलং করবে। এর মানে এটি অরিজিনাল puts মেথডের আগে কল হবে।
এখন:
আপনি যখন puts কল করবেন, আপনি এই নতুন মেথডটি কল করছেন যা সেটারপর super ব্যবহার করে অরিজিনাল puts কল করে।
Super বনাম Super() কখন ব্যবহার করবেন
আমরা এখন দেখেছি super কীভাবে ব্যবহার করবেন পেরেন্ট মেথড কল করার জন্য।
কিন্তু যদি পেরেন্ট মেথডটি একই সংখ্যক আর্গুমেন্ট নেয় না?
সেক্ষনে আপনি ব্যবহার করতে পারেন:
super()কোনো আর্গুমেন্ট ছাড়াsuper(arg1, arg2, ...)আপনি কী আর্গুমেন্ট পাস করতে চান সেটি বেছে নিতে
উদাহরণ:
def puts super() end
লক্ষ্য করুন প্যারেনথেসিসের এখানে স্পেশাল মানে আছে, একটি রেগুলার মেথড কলের Việt।
super সম্পর্কে আরও কিছু জিনিস জানা দরকার:
- এটি শুধু একটি মেথডের ভিতরে ব্যবহার করা যায়
- এটি পেরেন্ট মেথড কল করার রেজাল্ট রিটার্ন করে
- এটি একাধিকবার কল করা যায়
বোল্ড করা লাইন (super রেজাল্ট রিটার্ন করে) super-এর কিছু ব্যবহারের বোঝার জন্য কী।
আপনি super ব্যবহার করতে পারেন ডেকোরেটর প্যাটার্ন ইমপ্লিমেন্ট করতে, বা আপনি যদি এটি initialize মেথডের ভিতরে কল করেন তবে এটি পেরেন্ট ক্লাসে ইনস্ট্যান্স ভেরিয়েবল ইনিশিয়ালাইজ করতে ব্যবহার করা যায়।
সারসংক্ষেপ
আপনি রুবি super কিওয়ার্ড সম্পর্কে শিখেছেন, এটি কী এবং এটি বিভিন্ন পরিস্থিতিতে কীভাবে কাজ করে!
আপনি যদি এই আর্টিকেলটি উপভোগ করেন তবে আপনি RubyGuides নিউজলেটার সাবস্ক্রাইব করতে চাইতে পারেন এরকম আরও কন্টেন্ট এবং অন্যান্য উপকারী রুবি টিপস পেতে যা শুধু সাবস্ক্রাইবারের জন্য উপলব্ধ।