এই ভিডিওতে আমরা জানব Rust প্রোগ্রামিং ল্যাঙ্গুয়েজের খুবই গুরুত্বপূর্ণ এবং শক্তিশালী একটি কনসেপ্ট— Enum (ইনুম)। যারা অন্য ল্যাঙ্গুয়েজ থেকে এসেছেন বা একদম নতুন, সবার জন্যই এটি খুব কাজের। ভিডিওটি মূলত Rust Book-এর ওপর ভিত্তি করে তৈরি করা হয়েছে, যেখানে Enum কী, কেন এটি স্ট্রাক্টের (Struct) চেয়ে আলাদা এবং কীভাবে Option টাইপ ব্যবহার করে এরর কমানো যায়, তা শেখানো হয়েছে।
১. Enum বা Enumeration কী?
প্রথমে জানা দরকার Enum আসলে কী। সহজ কথায়, যখন কোনো জিনিসের মান বা ধরন একটি নির্দিষ্ট তালিকার মধ্যে সীমাবদ্ধ থাকে, তখন আমরা Enum ব্যবহার করি।
ভিডিও রেফারেন্স: [00:31]
বিস্তারিত ব্যাখ্যা: Enum-এর পুরো নাম হলো Enumeration। এটি আপনাকে এমন একটি ডাটা টাইপ তৈরি করতে দেয় যার কয়েকটি নির্দিষ্ট Variants (ভেরিয়েন্ট) বা রূপ থাকতে পারে। ধরুন, আপনি জ্যামিতিক শেপ নিয়ে কাজ করছেন। একটি শেপ হয় ‘Circle’ হবে, না হয় ‘Square’ হবে অথবা ‘Triangle’ হবে। এই তিনটি ছাড়া অন্য কিছু হওয়ার সুযোগ নেই। এইরকম পরিস্থিতিতে Enum সবচেয়ে ভালো কাজ করে।
কঠিন শব্দের সহজ অর্থ:
- Variant (ভেরিয়েন্ট): কোনো জিনিসের বিভিন্ন রূপ বা অপশন। যেমন: ট্রাফিক লাইটের ভেরিয়েন্ট হলো— লাল, হলুদ এবং সবুজ।
২. Enum বনাম Struct (স্ট্রাক্ট)
স্ট্রাক্ট এবং ইনুমের মধ্যে পার্থক্য বোঝাটা খুব জরুরি।
ভিডিও রেফারেন্স: [01:25]
বিস্তারিত ব্যাখ্যা:
-
Struct: যখন আপনার অনেকগুলো সম্পর্কিত ডাটাকে একসাথে (Group Together) রাখার দরকার হয় (যেমন: একজন ইউজারের নাম, বয়স এবং ইমেইল), তখন আপনি Struct ব্যবহার করেন।
-
Enum: যখন কোনো ভ্যালু অনেকগুলো অপশনের মধ্যে যেকোনো একটি (One of many) হতে পারে, তখন Enum ব্যবহার করা হয়।
উদাহরণ: একটি IP Address হয় v4 হবে অথবা v6 হবে। একসাথে দুটো হওয়া সম্ভব না। তাই এখানে Enum ব্যবহার করাই বুদ্ধিমানের কাজ।
৩. Enum-এর সাথে ডাটা যুক্ত করা
Rust-এর Enum-এর সবচেয়ে মজার বিষয় হলো, আপনি প্রতিটি ভেরিয়েন্টের সাথে আলাদা আলাদা ডাটা বা মান জুড়ে দিতে পারেন।
ভিডিও রেফারেন্স: [13:31]
কোডিং উদাহরণ:
Rust
enum IpAddr {
V4(u8, u8, u8, u8), // v4 এড্রেসে ৪টি নাম্বার থাকে
V6(String), // v6 এড্রেসে স্ট্রিং থাকতে পারে
}
fn main() {
let home = IpAddr::V4(127, 0, 0, 1);
let loopback = IpAddr::V6(String::from("::1"));
}
ব্যাখ্যা: এই কোডে আমরা IpAddr নামে একটি Enum বানিয়েছি। এখানে লক্ষ্য করুন, V4 ভেরিয়েন্টটি ৪টি ছোট পূর্ণসংখ্যা (u8) নিচ্ছে, আর V6 একটি লেখা বা স্ট্রিং নিচ্ছে। এটি স্ট্রাক্ট দিয়ে করা অনেক কঠিন হতো, কিন্তু Enum-এ খুব সহজেই করা যায়।
৪. Option Enum: নাল (Null) ভ্যালুর সমাধান
প্রোগ্রামিংয়ে 'Null' বা কোনো ভ্যালু না থাকা নিয়ে অনেক ঝামেলা হয়। Rust-এ সরাসরি কোনো 'Null' নেই, তার বদলে আছে Option টাইপ।
ভিডিও রেফারেন্স: [24:12]
বিস্তারিত ব্যাখ্যা: বলা হয় যে, 'Null' উদ্ভাবন করা ছিল একটি "বিলিয়ন ডলারের ভুল" কারণ এটি প্রচুর এরর তৈরি করে। Rust এটি সমাধান করেছে Option ইনুম দিয়ে। এর দুটি রূপ আছে:
-
Some(T): মানে এর ভেতর কিছু একটা ডাটা আছে।
-
None: মানে এতে কোনো ডাটা নেই (খালি)।
কঠিন শব্দের সহজ অর্থ:
- Generic (T): এখানে
Tমানে হলো যেকোনো ধরনের ডাটা (নাম্বার, লেখা ইত্যাদি) হতে পারে।
৫. Option থেকে ভ্যালু বের করা (Unwrap)
যদি কোনো ভ্যালু Option-এর ভেতরে থাকে, তবে সরাসরি তা ব্যবহার করা যায় না। ওটাকে বের করে আনতে হয়।
ভিডিও রেফারেন্স: [33:40]
কোডিং উদাহরণ:
Rust
fn main() {
let x: Option<i32> = Some(5);
let y: i32 = 10;
// x সরাসরি যোগ করা যাবে না, কারণ এটি Option টাইপ
// আমরা .unwrap() বা .unwrap_or() ব্যবহার করতে পারি
let sum = x.unwrap_or(0) + y;
println!("Sum is: {}", sum);
}
ব্যাখ্যা: এখানে unwrap_or(0) মানে হলো— যদি x-এ কোনো ভ্যালু থাকে তবে সেটা নাও, আর যদি না থাকে (None হয়) তবে ডিফল্ট হিসেবে 0 ধরে কাজ করো। এটি আপনার প্রোগ্রামকে ক্র্যাশ হওয়া থেকে বাঁচায়।
আমার এনালাইসিস এবং চিন্তা ভাবনা
সারাংশ: ভিডিও ক্রিয়েটর পীযূষ গর্গ বোঝাতে চেয়েছেন যে, Rust-এর টাইপ সিস্টেম কতটা শক্তিশালী। Enum শুধু লিস্ট তৈরির জন্য নয়, বরং ডাটাকে সুন্দরভাবে সাজানোর জন্য ব্যবহৃত হয়। বিশেষ করে Option টাইপ ব্যবহার করার ফলে আপনার কোডে রান-টাইম এরর হওয়ার সম্ভাবনা অনেক কমে যায়, কারণ কম্পাইলার আপনাকে বাধ্য করবে যেন আপনি "ভ্যালু না থাকার" পরিস্থিতিটা হ্যান্ডেল করেন।
বাস্তব প্রেক্ষাপট ও পরামর্শ: বাস্তব জীবনে যখন আপনি বড় কোনো প্রজেক্ট করবেন, তখন দেখবেন অনেক সময় ডাটাবেস থেকে কোনো তথ্য পাওয়া যায় না। অন্য ল্যাঙ্গুয়েজে সেখানে 'Null' এসে আপনার অ্যাপ ক্র্যাশ করিয়ে দেয়। কিন্তু Rust-এ আপনি Option ব্যবহার করলে নিশ্চিন্ত থাকতে পারেন।
বিকল্প ও পরামর্শ:
-
যদি আপনার ভেরিয়েন্টগুলো অনেক বেশি বড় হয়ে যায়, তবে প্রতিটি ভেরিয়েন্টের ভেতরে সরাসরি ডাটা না রেখে ছোট ছোট স্ট্রাক্ট (Struct) রেখে সেগুলোকে Enum-এ কল করতে পারেন। এতে কোড আরও পরিষ্কার হবে।
-
সবসময়
.unwrap()ব্যবহার না করে.unwrap_or()বাmatchব্যবহার করার চেষ্টা করুন, কারণ.unwrap()অনেক সময় প্যানিক বা এরর তৈরি করতে পারে যদি ভ্যালু না থাকে।
সহজ রেফারেন্স: আপনি যদি আরও গভীরে শিখতে চান, তবে Rust-এর অফিসিয়াল 'The Rust Programming Language' বইটির চ্যাপ্টার ৬ পড়তে পারেন।
[
The Enum and Match Types | Rust Book
Piyush Garg · 3.3K views
](http://www.youtube.com/watch?v=bW3WcL2P848)

মন্তব্যসমূহ
একটি মন্তব্য পোস্ট করুন
আপনার সমস্যাটি কমেন্ট করে আমাদের জানান :-d