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),
}
}ব্যাখ্যা:
- Structs:
Circlestruct এ একটি ফিল্ড আছে যাradiusনামে একটিf64টাইপের ভেরিয়েবল ধারণ করে।Rectanglestruct এ দুটি ফিল্ড আছে যাwidthএবংheightনামে দুটিf64টাইপের ভেরিয়েবল ধারণ করে।
- Enum:
Shapeনামক একটিenumডিফাইন করা হয়েছে, যেখানে দুটি ভিন্ন ধরণের আর্কিটেকচার রয়েছে:Circle(Circle): এটিCirclestruct এর একটি ইনস্ট্যান্স গ্রহণ করে।Rectangle(Rectangle): এটিRectanglestruct এর একটি ইনস্ট্যান্স গ্রহণ করে।
- 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এবংCheckingstruct দুটি ব্যাংক একাউন্টের প্রপার্টি ধারণ করে।Accountenum এর মাধ্যমে, দুটি ভিন্ন ধরনের একাউন্টকে একত্রে গ্রুপ করা হয়েছে।matchএক্সপ্রেশন ব্যবহার করে ব্যাংক একাউন্টের বিভিন্ন প্রপার্টি চেক করা হয়েছে এবং আউটপুট দেওয়া হয়েছে।
সারাংশ
রাস্টে enum এবং struct এর কম্বিনেশন ব্যবহার করে আপনি আরও জটিল, গঠনমূলক এবং নমনীয় ডেটা মডেল তৈরি করতে পারেন। enum বিভিন্ন ধরনের অবজেক্টের গ্রুপিং করার জন্য ব্যবহৃত হয় এবং প্রতিটি অবজেক্টকে struct দিয়ে বিশদভাবে তৈরি করা যায়, যাতে প্রতিটি প্রপার্টি স্পষ্টভাবে ধারণ করা যায়। এর মাধ্যমে কোড আরও পরিষ্কার, শক্তিশালী এবং কার্যকরী হয়।
Read more