আপনি যদি রুবি শিখছেন তবে আপনি "স্ব" কীওয়ার্ডের ব্যবহার খুব বিভ্রান্তিকর খুঁজে পেতে পারেন।
এটা কিভাবে কাজ করে?
self
কি , ঠিক?
এটি একটি রুবি কীওয়ার্ড যা আপনাকে বর্তমান অবজেক্টে অ্যাক্সেস দেয়।
আপনি যদি অবজেক্টগুলি না জানেন তবে এই ভিডিওটি দেখুন যা আমি আপনার জন্য তৈরি করেছি। এটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং এর সাথে সম্পর্কিত।
এই "বর্তমান বস্তু" প্রেক্ষাপটের উপর নির্ভর করে।
প্রসঙ্গ?
হ্যাঁ, প্রসঙ্গটি হল যে কোনো মুহূর্তে আপনার কোড যেখানে থাকে৷
৷এখানে একটি উদাহরণ আছে :
যদি আপনার কোড একটি উদাহরণ পদ্ধতির মধ্যে থাকে, self
একটি উদাহরণ যে শ্রেণীর। অন্য কথায়, self
একটি বস্তু।
আপনি নিজেই এটি কর্মে দেখতে পারেন৷
এই কোডটি চালান :
def coffee puts self end coffee # main
এই কোডটি একটি coffee
সংজ্ঞায়িত করে এবং কল করে পদ্ধতি যা self
এর মান প্রিন্ট করে .
এটি কেন main
প্রিন্ট করে ?
কারণ এটি শীর্ষ-স্তরের বস্তুর নাম, এটি এমন একটি বস্তু যেখানে আপনি বাইরে সংজ্ঞায়িত সমস্ত পদ্ধতি খুঁজে পাবেন একটি ক্লাস।
আমাদের coffee
পছন্দ করুন পদ্ধতি এখানে।
কিন্তু যদি আপনি Cat
নামের একটি ক্লাসের ভিতরে একটি পদ্ধতি সংজ্ঞায়িত করেন , তারপর self
একটি Cat
হবে বস্তু।
যেমন এখানে দেখা গেছে :
class Cat def meow puts self end end Cat.new.meow # <Cat:0x7a14c5>
এই উদাহরণগুলি থেকে, আমরা বলতে পারি যে self
এর মান আপনি এটি কোথায় ব্যবহার করেন তার উপর নির্ভর করে পরিবর্তন৷
এখন :
আমি বিশ্বাস করি আপনি এর উদ্দেশ্য বোঝার মাধ্যমে আরও ভালভাবে বুঝতে পারবেন৷
কেন self
দরকারী?
আসুন কিছু উদাহরণ দেখি।
দ্ব্যর্থহীনতার জন্য নিজেকে ব্যবহার করা
self
এর জন্য একটি ব্যবহারিক ব্যবহার একটি পদ্ধতি এবং একটি স্থানীয় ভেরিয়েবলের মধ্যে পার্থক্য বলতে সক্ষম হওয়া।
একটি ভেরিয়েবল এবং একই পদ্ধতির নাম দেওয়া একটি দুর্দান্ত ধারণা নয়। কিন্তু যদি আপনাকে সেই পরিস্থিতির সাথে কাজ করতে হয়, তাহলে আপনি self.method_name
দিয়ে পদ্ধতিটিকে কল করতে পারবেন .
আমি যা বলতে চাচ্ছি তা এখানে :
class Example def do_something banana = "variable" puts banana puts self.banana end def banana "method" end end Example.new.do_something # "variable" => puts banana # "method" => puts self.banana
এখানে আমাদের একটি banana
আছে স্থানীয় পরিবর্তনশীল, do_something
এর ভিতরে পদ্ধতি, কিন্তু আমাদের একটি banana
ও আছে পদ্ধতি।
একটি স্থানীয় পরিবর্তনশীল অগ্রাধিকার নেয়৷
৷
এজন্য আমাদের self
ব্যবহার করতে হবে এখানে যদি আমরা কল করতে চাই banana
পদ্ধতি, মুদ্রণ এর পরিবর্তে banana
এর মান পরিবর্তনশীল।
পরবর্তী :
আসুন আরও একটি সাধারণ ব্যবহারের ক্ষেত্রে দেখি... ক্লাস পদ্ধতি সংজ্ঞায়িত করা!
ক্লাস-লেভেল পদ্ধতি সংজ্ঞায়িত করার জন্য নিজেকে ব্যবহার করা
self
এর জন্য এক নম্বর ব্যবহার , নিঃসন্দেহে, শ্রেণী-স্তরের পদ্ধতি সংজ্ঞায়িত করা হয়।
আমি নিশ্চিত যে আপনি তাদের দেখেছেন।
এই def self.method_name
পদ্ধতি সংজ্ঞা .
এটির মত :
class Salad def self.buy_olive_oil # ... end end Salad.buy_olive_oil
এই self
এখানে Salad
এর সমতুল্য , ক্লাসের নাম।
এটি কেন দরকারী?
কারণ প্রতিটি পদ্ধতির সংজ্ঞার জন্য আমাদের ক্লাসের নাম ব্যবহার করতে হবে না, আমরা ক্লাস পরিবর্তন করলে আমাদের কোড পরিবর্তন করা সহজ করে তোলে।
এটি কোডটিকে কম শোরগোল এবং পড়তে আরও ভাল করে তোলে৷
তাই আমরা def self.buy_olive_oil
করি পরিবর্তে def Salad.buy_olive_oil
.
নিজের জন্য অন্যান্য ব্যবহার
হ্যাঁ!
self
এর জন্য আরও বেশি ব্যবহার রয়েছে , তাই এর সাথে পরিচিত হওয়া একটি সহায়ক জিনিস।
উদাহরণস্বরূপ :
আপনি বর্তমান বস্তুটিকে অন্য বস্তুর সাথে তুলনা করার জন্য একটি পদ্ধতিতে এটি ব্যবহার করতে পারেন।
এমন কিছু :
def ==(other) self == other end
এছাড়াও আপনি self
ব্যবহার করতে পারেন ডিবাগ করার উদ্দেশ্যে, আপনি কোন বস্তুর সাথে কাজ করছেন তা খুঁজে বের করতে।
এরকম :
p self
অথবা আপনি বিল্ডার ডিজাইন প্যাটার্নের মত ডিজাইন প্যাটার্ন বাস্তবায়নের জন্য রিটার্ন মান হিসেবে ব্যবহার করতে পারেন।
উদাহরণ :
class Salad def initialize @ingredients = [] end def add_nuts @ingredients << :nuts self end end my_salad = Salad.new.add_nuts
সংক্ষেপে, এখানে নিজের জন্য সহায়ক ব্যবহারের একটি তালিকা রয়েছে :
- শ্রেণী-স্তরের পদ্ধতিগুলি সংজ্ঞায়িত করুন
- যখন আপনার একই নামের একটি স্থানীয় ভেরিয়েবল থাকে তখন একটি উদাহরণ পদ্ধতি ব্যবহার করুন
- প্রত্যাবর্তনকারী স্বয়ং (বিল্ডার প্যাটার্ন)
- ডিবাগিং
- বস্তুর তুলনা (==)
- পদ্ধতি কলের ডিফল্ট রিসিভার
নিজের বনাম নিজেই
এই বিষয়টি শেষ করার আগে আমাদের আরও একটি জিনিস দেখা উচিত।
Kernel#itself
পদ্ধতি।
এটি এমন একটি পদ্ধতি যা আপনি একটি বস্তুকে কল করতে পারেন এবং বস্তুটি নিজেই ফিরে আসবে।
উদাহরণ :
[1,2,3,nil].select(&:itself) # [1, 2 ,3]
এই উদাহরণটি nil
ফিল্টার করে &false
মান।
পার্থক্য বোঝা :
self
একটি কীওয়ার্ড। এর মান নির্ভর করে কোথায় আপনি এটি ব্যবহার করুনitself
একটি পদ্ধতি। এর মান নির্ভর করে কি এর উপর বস্তু আপনি এটি ব্যবহার করেন (1.itself
-এ ,1
বস্তুটি)
আশা করি এটি সহায়ক।
উপসংহার
আপনি রুবি সেলফ কীওয়ার্ড সম্পর্কে শিখেছেন, এটি ঠিক কী, কেন এটি দরকারী এবং কীভাবে এটি ব্যবহার করতে হয়৷
এখন এটি চেষ্টা করার পালা আপনার।
পড়ার জন্য ধন্যবাদ! 🙂