Enum এবং Struct এর কম্বিনেশন

Enums এবং Pattern Matching (এনাম এবং প্যাটার্ন ম্যাচিং) - রাস্ট (Rust) - Computer Programming

236

Enum এবং Struct: ভূমিকা

  • Enum (এনাম): enum একটি ডেটা টাইপ, যা বিভিন্ন ধরণের মান ধারণ করতে পারে। প্রতিটি মান একটি ভিন্ন ভিন্ন ভ্যারিয়েবল হতে পারে।
  • Struct (স্ট্রাকচার): struct একাধিক ভেরিয়েবলের একটি গ্রুপ যা একটি একক ইউনিট হিসেবে কাজ করে। এটি সাধারণত ডেটা ধারণ করতে ব্যবহৃত হয়।

রাস্টে enum এবং struct একসাথে ব্যবহার করা খুবই সাধারণ। এর মাধ্যমে আপনি আরও জটিল ডেটা কাঠামো তৈরি করতে পারেন, যেখানে enum ভিন্ন ধরণের অবজেক্টগুলিকে গ্রুপ করবে এবং struct তাদের সুনির্দিষ্ট প্রপার্টি বা ডেটা সংরক্ষণ করবে।


Enum এবং Struct এর কম্বিনেশন উদাহরণ

ধরা যাক, আমরা একটি Shape নামক enum তৈরি করতে চাই, যা বিভিন্ন ধরনের আকৃতির তথ্য ধারণ করবে যেমন Circle, Rectangle ইত্যাদি। প্রতিটি আকৃতির ভিন্ন ভিন্ন প্রপার্টি থাকতে পারে, যেমন বৃত্তের জন্য রেডিয়াস এবং আয়তক্ষেত্রের জন্য প্রস্থ এবং উচ্চতা।

// প্রথমে struct গুলি ডিফাইন করা হচ্ছে:
struct Circle {
    radius: f64,
}

struct Rectangle {
    width: f64,
    height: f64,
}

// Enum ডিফাইন করা হচ্ছে:
enum Shape {
    Circle(Circle),
    Rectangle(Rectangle),
}

fn main() {
    // একটি Circle তৈরি করা
    let c = Circle { radius: 5.0 };

    // একটি Rectangle তৈরি করা
    let r = Rectangle {
        width: 10.0,
        height: 20.0,
    };

    // Shape enum এ Circle এবং Rectangle পাস করা
    let shape1 = Shape::Circle(c);
    let shape2 = Shape::Rectangle(r);

    // Shape অনুযায়ী কাজ করা
    match shape1 {
        Shape::Circle(c) => println!("Circle with radius: {}", c.radius),
        Shape::Rectangle(r) => println!("Rectangle with width: {} and height: {}", r.width, r.height),
    }

    match shape2 {
        Shape::Circle(c) => println!("Circle with radius: {}", c.radius),
        Shape::Rectangle(r) => println!("Rectangle with width: {} and height: {}", r.width, r.height),
    }
}

ব্যাখ্যা:

  1. Structs:
    • Circle struct এ একটি ফিল্ড আছে যা radius নামে একটি f64 টাইপের ভেরিয়েবল ধারণ করে।
    • Rectangle struct এ দুটি ফিল্ড আছে যা width এবং height নামে দুটি f64 টাইপের ভেরিয়েবল ধারণ করে।
  2. Enum:
    • Shape নামক একটি enum ডিফাইন করা হয়েছে, যেখানে দুটি ভিন্ন ধরণের আর্কিটেকচার রয়েছে:
      • Circle(Circle): এটি Circle struct এর একটি ইনস্ট্যান্স গ্রহণ করে।
      • Rectangle(Rectangle): এটি Rectangle struct এর একটি ইনস্ট্যান্স গ্রহণ করে।
  3. Enum এবং Struct এর ব্যবহার:
    • shape1 এবং shape2 দুটি ভেরিয়েবল তৈরি করা হয়েছে, যেখানে একটি Circle এবং একটি Rectangle সংরক্ষিত রয়েছে।
    • match এক্সপ্রেশন ব্যবহার করে enum এর মান যাচাই করা হয়েছে এবং প্রতিটি আকৃতির প্রপার্টি প্রিন্ট করা হয়েছে।

কেন Enum এবং Struct একসাথে ব্যবহার করা?

  • লজিক্যাল সংগঠন: যখন আপনি বিভিন্ন ধরনের ডেটা গ্রুপ করতে চান, সেখানে enum ব্যবহার করা সুবিধাজনক। প্রতিটি enum ভ্যালু বিভিন্ন struct ধারণ করতে পারে, এবং এভাবে আমরা বিভিন্ন ধরনের ডেটাকে একত্রিত করতে পারি।
  • বিশেষ ফিচার যুক্ত করা: struct ডেটা ধারণের জন্য ব্যবহৃত হয়, যা জটিল বা বিশেষ ডেটা ধারণ করে। enum এর মাধ্যমে, আপনি একাধিক struct এর একটি ধরনের ডেটা গ্রুপ করতে পারেন এবং আলাদাভাবে প্রক্রিয়া করতে পারেন।
  • প্যাটার্ন ম্যাচিং: enum এবং struct এর কম্বিনেশন আপনাকে খুব সহজে match এক্সপ্রেশন ব্যবহার করে বিভিন্ন ধরনের অবজেক্ট চেক করার সুবিধা দেয়।

আরও উদাহরণ:

ধরা যাক, আমরা কিছু ব্যাংক একাউন্টের ধরন তৈরি করতে চাই। এর জন্য Account নামক enum এবং প্রতিটি অ্যাকাউন্টের জন্য struct ব্যবহার করতে পারি।

struct Savings {
    balance: f64,
    interest_rate: f64,
}

struct Checking {
    balance: f64,
    overdraft_limit: f64,
}

enum Account {
    Savings(Savings),
    Checking(Checking),
}

fn main() {
    let saving_account = Savings {
        balance: 5000.0,
        interest_rate: 2.5,
    };

    let checking_account = Checking {
        balance: 1000.0,
        overdraft_limit: 500.0,
    };

    let account1 = Account::Savings(saving_account);
    let account2 = Account::Checking(checking_account);

    match account1 {
        Account::Savings(s) => println!("Savings Account: Balance: {} with Interest Rate: {}", s.balance, s.interest_rate),
        Account::Checking(c) => println!("Checking Account: Balance: {} with Overdraft Limit: {}", c.balance, c.overdraft_limit),
    }

    match account2 {
        Account::Savings(s) => println!("Savings Account: Balance: {} with Interest Rate: {}", s.balance, s.interest_rate),
        Account::Checking(c) => println!("Checking Account: Balance: {} with Overdraft Limit: {}", c.balance, c.overdraft_limit),
    }
}

অংশবিশেষ:

  • Savings এবং Checking struct দুটি ব্যাংক একাউন্টের প্রপার্টি ধারণ করে।
  • Account enum এর মাধ্যমে, দুটি ভিন্ন ধরনের একাউন্টকে একত্রে গ্রুপ করা হয়েছে।
  • match এক্সপ্রেশন ব্যবহার করে ব্যাংক একাউন্টের বিভিন্ন প্রপার্টি চেক করা হয়েছে এবং আউটপুট দেওয়া হয়েছে।

সারাংশ

রাস্টে enum এবং struct এর কম্বিনেশন ব্যবহার করে আপনি আরও জটিল, গঠনমূলক এবং নমনীয় ডেটা মডেল তৈরি করতে পারেন। enum বিভিন্ন ধরনের অবজেক্টের গ্রুপিং করার জন্য ব্যবহৃত হয় এবং প্রতিটি অবজেক্টকে struct দিয়ে বিশদভাবে তৈরি করা যায়, যাতে প্রতিটি প্রপার্টি স্পষ্টভাবে ধারণ করা যায়। এর মাধ্যমে কোড আরও পরিষ্কার, শক্তিশালী এবং কার্যকরী হয়।

Content added By
Promotion

Are you sure to start over?

Loading...