আপনি যদি রুবি শিখছেন তবে আপনি "স্ব" কীওয়ার্ডের ব্যবহার খুব বিভ্রান্তিকর খুঁজে পেতে পারেন।
এটা কিভাবে কাজ করে?
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বস্তুটি)
আশা করি এটি সহায়ক।
উপসংহার
আপনি রুবি সেলফ কীওয়ার্ড সম্পর্কে শিখেছেন, এটি ঠিক কী, কেন এটি দরকারী এবং কীভাবে এটি ব্যবহার করতে হয়৷
এখন এটি চেষ্টা করার পালা আপনার।
পড়ার জন্য ধন্যবাদ! 🙂