Rust এ Custom Errors তৈরি করা

Error Handling (এরর হ্যান্ডলিং) - রাস্ট (Rust) - Computer Programming

240

Rust-এ Custom Errors তৈরি করা খুবই গুরুত্বপূর্ণ, কারণ এটি আপনাকে আপনার প্রোগ্রামে স্পষ্ট এবং বোধগম্য ত্রুটি বার্তা প্রদান করতে সাহায্য করে। Rust-এর ত্রুটি ব্যবস্থাপনা ব্যবস্থা Result এবং Option টাইপ ব্যবহার করে, যেখানে ত্রুটির জন্য সাধারণত Err ভ্যারিয়েবল ব্যবহৃত হয়। আপনি যখন একটি Custom Error তৈরি করবেন, তখন আপনি আপনার নিজের ত্রুটি টাইপ তৈরি করতে পারবেন এবং সেটিকে সুন্দরভাবে প্রিন্ট করতে পারবেন।


Custom Error তৈরি করার জন্য Steps

১. Custom Error টাইপ তৈরি করা

প্রথমে, আপনি একটি নতুন enum বা struct তৈরি করবেন যা ত্রুটির জন্য বিভিন্ন ধরন (variants) ধারণ করবে।

২. Error Trait ইমপ্লিমেন্ট করা

Rust-এর std::error::Error ট্রেইটটি ব্যবহার করা হয়। আপনার কাস্টম ত্রুটির ধরন Error ট্রেইটটি ইমপ্লিমেন্ট করতে পারে, যাতে আপনার ত্রুটির জন্য একটি description() এবং cause() মেথড ব্যবহার করা যায়।

৩. Debug এবং Display Trait ইমপ্লিমেন্ট করা

যেহেতু কাস্টম ত্রুটির জন্য Debug এবং Display ট্রেইট ইমপ্লিমেন্ট করা যেতে পারে, তাই আপনি ত্রুটি বার্তা সুন্দরভাবে আউটপুট করতে পারবেন।


উদাহরণ: Custom Error তৈরি করা

১. Custom Error টাইপ তৈরি করা

আমরা একটি MyError নামক কাস্টম ত্রুটি তৈরি করব।

use std::fmt;

#[derive(Debug)]
enum MyError {
    NotFound,
    InvalidInput,
}

এখানে, MyError নামক একটি enum তৈরি করা হয়েছে যেটি দুটি ভ্যারিয়েন্ট ধারণ করে: NotFound এবং InvalidInput

২. Error ট্রেইট ইমপ্লিমেন্ট করা

আমরা std::error::Error ট্রেইটটি আমাদের কাস্টম ত্রুটির জন্য ইমপ্লিমেন্ট করব, যাতে ত্রুটির বর্ণনা এবং কারণ (cause) প্রদান করা যায়।

use std::fmt;

impl fmt::Display for MyError {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        match self {
            MyError::NotFound => write!(f, "Error: Not Found"),
            MyError::InvalidInput => write!(f, "Error: Invalid Input"),
        }
    }
}

impl std::error::Error for MyError {}

এখানে, fmt::Display ট্রেইটটি ইমপ্লিমেন্ট করার মাধ্যমে MyErrorto_string() মেথড প্রদান করা হয়েছে, যা ত্রুটির বর্ণনা করবে। std::error::Error ট্রেইটটি ব্যবহার করে MyError কাস্টম ত্রুটির জন্য description() মেথডও সরবরাহ করা হয়েছে।

৩. ব্যবহার উদাহরণ

এখন, কাস্টম ত্রুটি ব্যবহার করা যাক। আমরা একটি ফাংশন তৈরি করব যা একটি ত্রুটি ফেরত দেয়।

fn check_input(input: i32) -> Result<(), MyError> {
    if input < 0 {
        Err(MyError::InvalidInput)
    } else if input == 0 {
        Err(MyError::NotFound)
    } else {
        Ok(())
    }
}

fn main() {
    match check_input(-1) {
        Ok(_) => println!("Valid input!"),
        Err(e) => println!("Error occurred: {}", e),
    }
}

এখানে, check_input ফাংশনটি একটি Result ফেরত দেয়, যা Ok হলে কোনো ত্রুটি নেই এবং Err হলে কাস্টম ত্রুটি ফেরত দেয়। main ফাংশনে আমরা এই ত্রুটিকে ম্যাচ করে আউটপুট প্রিন্ট করি।

আউটপুট:

Error occurred: Error: Invalid Input

Custom Error-এ আরও বেশি Flexibility

আপনি চাইলে আরও অনেক কাস্টম ত্রুটি ধরন তৈরি করতে পারেন। উদাহরণস্বরূপ, আপনি struct ব্যবহার করে আরও বিস্তারিত ত্রুটি বার্তা প্রদান করতে পারেন।

use std::fmt;

#[derive(Debug)]
struct MyError {
    details: String,
}

impl MyError {
    fn new(msg: &str) -> MyError {
        MyError {
            details: msg.to_string(),
        }
    }
}

impl fmt::Display for MyError {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "Error: {}", self.details)
    }
}

impl std::error::Error for MyError {}

fn cause_error() -> Result<(), MyError> {
    Err(MyError::new("Something went wrong!"))
}

fn main() {
    match cause_error() {
        Ok(_) => println!("No error occurred"),
        Err(e) => println!("Error: {}", e),
    }
}

এখানে, MyError নামক একটি স্ট্রাকচার ব্যবহার করে কাস্টম ত্রুটি তৈরি করা হয়েছে, যেখানে একটি বিস্তারিত ত্রুটি বার্তা থাকে।


সারাংশ

Rust-এ Custom Errors তৈরি করার মাধ্যমে আপনি ত্রুটি ব্যবস্থাপনায় উন্নত এবং বোধগম্য কাস্টমাইজেশন পেতে পারেন। আপনি enum বা struct ব্যবহার করে কাস্টম ত্রুটি টাইপ তৈরি করতে পারেন এবং Error, Debug, ও Display ট্রেইট ইমপ্লিমেন্ট করে সেগুলিকে সুন্দরভাবে প্রিন্ট করতে পারেন। এটি আপনার কোডে আরও পরিষ্কার এবং অর্থবোধক ত্রুটি বার্তা প্রদান করতে সাহায্য করে।

Content added By
Promotion

Are you sure to start over?

Loading...