মূল কন্টেন্টে যান
মডিউল 4 · 2-এর পাঠ 2কোর্সে 8/14~12 min
মডিউল পাঠ (2/2)

পদ্ধতি এবং impl ব্লক

মরিচা-এ, পদ্ধতিগুলি ফাংশনের মতোই, তবে সেগুলিকে একটি স্ট্রাকট (বা একটি enum বা বৈশিষ্ট্য) এর প্রেক্ষাপটে সংজ্ঞায়িত করা হয় এবং তাদের প্রথম প্যারামিটারটি সর্বদা self হয়, যা পদ্ধতিটি যে স্ট্রাকটটি কল করা হচ্ছে তার উদাহরণকে উপস্থাপন করে।

impl দিয়ে পদ্ধতি সংজ্ঞায়িত করা

একটি স্ট্রাকটে পদ্ধতি সংজ্ঞায়িত করতে, আমরা স্ট্রাকটের নামের সাথে একটি impl (বাস্তবায়ন) ব্লক ব্যবহার করি:

Rust
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 কে গ্রহণ করে নাকে সংযুক্ত ফাংশন বলা হয় (অন্যান্য ভাষায় স্ট্যাটিক পদ্ধতির সমতুল্য)।

এগুলি প্রায়ই স্ট্রাকটের নতুন দৃষ্টান্ত ফিরিয়ে আনতে কনস্ট্রাক্টর হিসাবে ব্যবহৃত হয়। তাদের কল করতে, ডাবল কোলন :: সিনট্যাক্স ব্যবহার করুন:

Rust
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):

Rust
impl Rectangle {
    fn double_size(&mut self) {
        self.width *= 2;
        self.height *= 2;
    }
}

নিজে চেষ্টা করে দেখুন

ব্যায়াম#rust.m4.l2.e1
প্রচেষ্টা: 0লোড হচ্ছে...

যে এলাকা পদ্ধতিটি &self নেয় এবং u32 প্রদান করে (প্রস্থ এবং উচ্চতার গুণন) তা সংজ্ঞায়িত করে impl ব্লকটি সম্পূর্ণ করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

লিখুন `fn এলাকা(&self) -> u32 { self.width \* self.height }``impl Rectangle` ব্লকের ভিতরে।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম#rust.m4.l2.e2
প্রচেষ্টা: 0লোড হচ্ছে...

impl আয়তক্ষেত্রের ভিতরে বর্গক্ষেত্র সম্পর্কিত ফাংশনটি সংজ্ঞায়িত করুন, যা আকার: u32 গ্রহণ করে এবং আকারের সমান প্রস্থ এবং উচ্চতা সহ একটি আয়তক্ষেত্রের উদাহরণ প্রদান করে।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

লিখুন `fn স্কোয়ার(size: u32) -> Rectangle { Rectangle { width: size, height: size } }``impl` ব্লকের ভিতরে।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম#rust.m4.l2.e3
প্রচেষ্টা: 0লোড হচ্ছে...

ইমপ্ল ব্লকের ভিতরে আয়তক্ষেত্রে স্কেল মিউটেটর পদ্ধতি যোগ করুন। স্কেল পদ্ধতিটি অবশ্যই স্ব (&mut self) এবং একটি ফ্যাক্টর: u32 প্যারামিটারের একটি পরিবর্তনযোগ্য রেফারেন্স নিতে হবে এবং আয়তক্ষেত্রের প্রস্থ এবং উচ্চতা উভয়কে গুণনীয়ক দ্বারা গুণ করতে হবে।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

`ফ্যাক্টর`দ্বারা গুণ করে`self.width`এবং`self.height`আপডেট করতে`fn স্কেল(&mut self, factor: u32)` প্রয়োগ করুন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ