সরাসরি প্রধান সামগ্রীতে চলে যান

Rust-এ Enum এবং Option টাইপ বোঝা সহজ ভাষায়

এই ভিডিওতে আমরা জানব 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 ইনুম দিয়ে। এর দুটি রূপ আছে:

  1. Some(T): মানে এর ভেতর কিছু একটা ডাটা আছে।

  2. 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)

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

তারাবিহ সমগ্র - প্রথম আলো

রামাদান ২০২৪ উপলক্ষে প্রথম আলোর নিয়মিত আয়োজন - খতমে তারাবিহ'র সূরা গুলো নিয়ে সংক্ষিপ্ত আলোচনা'র লিংক  নিচে দেওয়া হলো।  লিংকে ক্লিক করলেই আপনাকে আলোচনা তে নিয়ে যাবে। তারাবিহ: ১ | একটি খুন ও গাভি নিয়ে বনি ইসরাইলের বাড়াবাড়ি তারাবিহ: ২ | নারীর মর্যাদা ও অধিকার এবং অলৌকিক তিন ঘটনা তারাবিহ: ৩ | যে ১৪ নারীকে বিয়ে করা হারাম তারাবিতে: ১২ | মহানবী (সা.)–এর আকাশভ্রমণ এবং আসহাবে কাহাফের কাহিনি

রেডমি নোট ৯ এর বিস্তারিত | Redmi Note 9 in Bangla

৩০ এপ্রিল, ২০২০ এ শাওমির ঘোষনা আসে এই ফোনটি নিয়ে। কিন্তু ফোনটি মার্কেটে আসে মে মাসের শেষের দিকে৷ করোনার কারনে ফোনটি বাংলাদেশে আসতে আরো সময় নেয়। বর্তমানে বাংলাদেশে আন অফিশিয়াল ভাবে ফোনটি পাওয়া যাচ্ছে৷ বাংলাদেশে অফিশিয়াল ভাবে এখনো ফোনটি আসার তথ্য নেয়৷ চলুন ফোনটি নিয়ে বিস্তারিত আলোচনা করা যাক। শাওমি নোট সিরিজের ফোন বের করে এদের রেডমি নামে সাব ব্যান্ড৷ এদের কাজ হল এই নোট সিরিজ নিয়ে কাজ করা৷ প্রতিবছর নোট সিরিজের ১/২ টা ফোন বাজারে আসে। সাথে সেই ফোন গুলার বিভিন্ন ভার্সন (যেমন - র‍্যাম ও রমের ভিত্তিতে) বাজারে আসে। এই বছরও তারা রেডমি সিরিজের নোট ৯ বাজারে আনে। এই বছর হয়তো এই সিরিজের আরো ফোন বাজারে আসবে। ডিস্পলেঃ ফোনটির ডিসপ্লে সাইজ ৬.৫৩ ইঞ্চি। এতে আইপিএস এলসিডি ডিসপ্লে ব্যবহার করা হয়েছে। এই ফোনের ডিসপ্লে প্রটেকশন হিসেবে আছে গরিলা গ্লাস ফাইভ। স্ক্রিন আর ফোনের বডির অনুপাত প্রায় ৮৩.৫%। এই ফোনের ডিসপ্লে ফুলএইচডি মানে ১০৮০পি। এই ডিস্পলের দৈর্ঘ্য ১৯.৫ একক এবং প্রস্থ হল ৯ একক। এত বড় ফোনের কারনে এই ফোনের পিপি আই ডেনসিটি ৩৯৫। যা একটু কম। প্লাটফর্মঃ এই ফোনের অপারেটিং সিস্টেম এন্ড্রয়েড ১০ এবং এর...