মডিউল পাঠ (2/2)
পদ্ধতি এবং impl ব্লক
মরিচা-এ, পদ্ধতিগুলি ফাংশনের মতোই, তবে সেগুলিকে একটি স্ট্রাকট (বা একটি enum বা বৈশিষ্ট্য) এর প্রেক্ষাপটে সংজ্ঞায়িত করা হয় এবং তাদের প্রথম প্যারামিটারটি সর্বদা self হয়, যা পদ্ধতিটি যে স্ট্রাকটটি কল করা হচ্ছে তার উদাহরণকে উপস্থাপন করে।
impl দিয়ে পদ্ধতি সংজ্ঞায়িত করা
একটি স্ট্রাকটে পদ্ধতি সংজ্ঞায়িত করতে, আমরা স্ট্রাকটের নামের সাথে একটি impl (বাস্তবায়ন) ব্লক ব্যবহার করি:
struct Rectangle {
width: u32,
height: u32,
}
impl Rectangle {
// This is an instance method. It takes &self for reading.
fn area(&self) -> u32 {
self.width * self.height
}
}
fn main() {
let rect = Rectangle { width: 30, height: 50 };
// Call the method using dot notation
println!("The area is: {}", rect.area());
}অ্যাসোসিয়েটেড (স্ট্যাটিক) ফাংশন
একটি impl ব্লকের মধ্যে সংজ্ঞায়িত ফাংশনগুলি যেগুলি তাদের প্রথম প্যারামিটার হিসাবে self কে গ্রহণ করে নাকে সংযুক্ত ফাংশন বলা হয় (অন্যান্য ভাষায় স্ট্যাটিক পদ্ধতির সমতুল্য)।
এগুলি প্রায়ই স্ট্রাকটের নতুন দৃষ্টান্ত ফিরিয়ে আনতে কনস্ট্রাক্টর হিসাবে ব্যবহৃত হয়। তাদের কল করতে, ডাবল কোলন :: সিনট্যাক্স ব্যবহার করুন:
impl Rectangle {
// Associated function
fn square(size: u32) -> Rectangle {
Rectangle {
width: size,
height: size,
}
}
}
fn main() {
// Call the associated function
let sq = Rectangle::square(10);
}যে পদ্ধতিগুলি রাজ্যকে সংশোধন করে: &mut self
যদি একটি পদ্ধতির স্ট্রাকটের ক্ষেত্রগুলিকে সংশোধন করার প্রয়োজন হয়, তবে এটি অবশ্যই তার প্রথম প্যারামিটারটিকে &mut self হিসাবে ঘোষণা করতে হবে। যে দৃষ্টান্তে পদ্ধতিটিকে কল করা হয়েছে তাকে অবশ্যই পরিবর্তনযোগ্য হিসাবে ঘোষণা করতে হবে (let mut):
impl Rectangle {
fn double_size(&mut self) {
self.width *= 2;
self.height *= 2;
}
}নিজে চেষ্টা করে দেখুন
যে এলাকা পদ্ধতিটি &self নেয় এবং u32 প্রদান করে (প্রস্থ এবং উচ্চতার গুণন) তা সংজ্ঞায়িত করে impl ব্লকটি সম্পূর্ণ করুন।
ইঙ্গিত দেখান
লিখুন `fn এলাকা(&self) -> u32 { self.width \* self.height }``impl Rectangle` ব্লকের ভিতরে।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
impl আয়তক্ষেত্রের ভিতরে বর্গক্ষেত্র সম্পর্কিত ফাংশনটি সংজ্ঞায়িত করুন, যা আকার: u32 গ্রহণ করে এবং আকারের সমান প্রস্থ এবং উচ্চতা সহ একটি আয়তক্ষেত্রের উদাহরণ প্রদান করে।
ইঙ্গিত দেখান
লিখুন `fn স্কোয়ার(size: u32) -> Rectangle { Rectangle { width: size, height: size } }``impl` ব্লকের ভিতরে।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ইমপ্ল ব্লকের ভিতরে আয়তক্ষেত্রে স্কেল মিউটেটর পদ্ধতি যোগ করুন। স্কেল পদ্ধতিটি অবশ্যই স্ব (&mut self) এবং একটি ফ্যাক্টর: u32 প্যারামিটারের একটি পরিবর্তনযোগ্য রেফারেন্স নিতে হবে এবং আয়তক্ষেত্রের প্রস্থ এবং উচ্চতা উভয়কে গুণনীয়ক দ্বারা গুণ করতে হবে।
ইঙ্গিত দেখান
`ফ্যাক্টর`দ্বারা গুণ করে`self.width`এবং`self.height`আপডেট করতে`fn স্কেল(&mut self, factor: u32)` প্রয়োগ করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ