Result এবং Option এর ব্যবহার

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

298

Result

রাস্টে Result একটি খুব গুরুত্বপূর্ণ এবং শক্তিশালী টিউপল (tuple) ধরনের ডেটা, যা মূলত ফাংশন বা অপারেশনের সফল বা ব্যর্থ ফলাফল ফিরিয়ে দেয়। Result দুটি ভ্যালু ধারণ করে:

  • Ok(T): অপারেশন সফল হলে, যেখানে T হল সফল ফলাফল।
  • Err(E): অপারেশন ব্যর্থ হলে, যেখানে E হল ত্রুটির তথ্য।

Result টাইপটি প্রধানত ত্রুটি হ্যান্ডলিং (error handling) এর জন্য ব্যবহৃত হয় এবং এটি Rust-এর মূল ফিচারগুলির মধ্যে একটি।

উদাহরণ:

ধরা যাক, আমরা একটি সংখ্যাকে আরেকটি সংখ্যায় ভাগ করতে চাই এবং ফলস্বরূপ Result টাইপ ব্যবহার করে ত্রুটি এবং সফল ফলাফল হ্যান্ডল করতে চাই।

fn divide(a: i32, b: i32) -> Result<i32, String> {
    if b == 0 {
        Err(String::from("Cannot divide by zero"))
    } else {
        Ok(a / b)
    }
}

fn main() {
    let result = divide(10, 2);

    match result {
        Ok(value) => println!("Result is {}", value),
        Err(e) => println!("Error: {}", e),
    }
}

এখানে, divide ফাংশন দুটি ভ্যালু ফেরত দেয়:

  • যদি দ্বিতীয় প্যারামিটার শূন্য না হয়, তাহলে Ok(a / b) ফেরত দেয়, যেখানে a / b হল সফল ফলাফল।
  • যদি দ্বিতীয় প্যারামিটার শূন্য হয়, তাহলে Err ফেরত দেয়, যেখানে ত্রুটির বার্তা হিসেবে "Cannot divide by zero" দেওয়া হয়।

match স্টেটমেন্টের মাধ্যমে Result এর দুটি ভ্যালু Ok এবং Err হ্যান্ডল করা হয়।

Result এর কিছু প্রধান বৈশিষ্ট্য:

  • unwrap(): এটি Ok ভ্যালু রিটার্ন করলে সেই ভ্যালু দেয়, তবে যদি Err হয়, তাহলে প্রোগ্রামটি প্যানিক করে।
  • map(): এটি সফল হলে, অপারেশনটি প্রয়োগ করে এবং নতুন Result তৈরি করে।
  • and_then(): এটি চেইনিং অপারেশন করতে ব্যবহৃত হয়, যাতে একাধিক Result এর উপর কাজ করা যায়।

Option

রাস্টে Option হল একটি ডেটা টাইপ যা দুইটি ভ্যালু ধারণ করতে পারে:

  • Some(T): এটি T ধরনের মান ধারণ করে, যা প্রমাণ করে যে কিছু মান উপস্থিত রয়েছে।
  • None: এটি বোঝায় যে কোনো মান উপস্থিত নেই।

Option মূলত null বা undefined এর প্রতিস্থাপন হিসেবে ব্যবহৃত হয়, যাতে কোডে ভুল বা নিরাপত্তাহীন null রেফারেন্স না আসে।

উদাহরণ:

ধরা যাক, আমরা একটি ফাংশন লিখেছি যা একটি নাম গ্রহণ করে এবং তার প্রথম অক্ষর ফিরিয়ে দেয়, কিন্তু যদি নাম শূন্য হয়, তাহলে None ফেরত দিবে।

fn first_char(name: &str) -> Option<char> {
    if name.is_empty() {
        None
    } else {
        Some(name.chars().next().unwrap())
    }
}

fn main() {
    let name = "Alice";
    match first_char(name) {
        Some(c) => println!("First character is {}", c),
        None => println!("No character found"),
    }
}

এখানে, first_char ফাংশন একটি Option<char> ফেরত দেয়:

  • যদি নামটি শূন্য না হয়, তাহলে Some(c) দিয়ে প্রথম অক্ষর রিটার্ন করবে।
  • যদি নামটি শূন্য হয়, তাহলে None রিটার্ন করবে।

match স্টেটমেন্টের মাধ্যমে Option এর Some এবং None ভ্যালু হ্যান্ডল করা হয়।

Option এর কিছু প্রধান বৈশিষ্ট্য:

  • unwrap(): এটি Some ভ্যালু রিটার্ন করলে তার ভ্যালু দেয়, তবে যদি None হয়, প্রোগ্রামটি প্যানিক করে।
  • map(): এটি সফল হলে, অপারেশনটি প্রয়োগ করে এবং নতুন Option তৈরি করে।
  • and_then(): এটি চেইনিং অপারেশন করতে ব্যবহৃত হয়, যাতে একাধিক Option এর উপর কাজ করা যায়।

Result এবং Option এর মধ্যে পার্থক্য

  • Result সাধারণত ত্রুটি পরিচালনার জন্য ব্যবহৃত হয়, যেখানে কিছু অপারেশন সফল না হলে একটি ত্রুটি বার্তা ফেরত দেওয়া হয়। Result ত্রুটি এবং সফল ফলাফলের মধ্যে পার্থক্য নির্ধারণ করে।
  • Option সাধারণত যখন কোনো মান হতে পারে না বা শূন্য হতে পারে, তখন ব্যবহৃত হয়। এটি শুধু মানের অস্তিত্ব চেক করে, তবে কোনো ত্রুটি বার্তা থাকে না।

উদাহরণ:

  • Result ব্যবহার করা হবে যদি আপনি একটি অপারেশন বা ফাংশনের মধ্যে ত্রুটি বা ব্যর্থতা শিকার করতে চান, যেমন ফাইল খোলার সময় ত্রুটি, অথবা নেটওয়ার্ক রিকোয়েস্ট ব্যর্থ হলে।
  • Option ব্যবহার করা হবে যদি আপনি নিশ্চিত না হন যে কোনো মান রয়েছে কি না, যেমন একটি অ্যারে থেকে একটি উপাদান খোঁজার সময়।

সারাংশ

Result এবং Option রাস্টের দুটি অত্যন্ত গুরুত্বপূর্ণ ডেটা টাইপ, যা ত্রুটি এবং মানের অস্তিত্ব সুরক্ষিতভাবে পরিচালনা করতে সহায়তা করে। Result ব্যবহৃত হয় ত্রুটি হ্যান্ডলিংয়ের জন্য, যেখানে আপনি সফল বা ব্যর্থ অপারেশন থেকে তথ্য ফেরত পান, এবং Option ব্যবহৃত হয় যখন কোনো মান থাকতে পারে বা না থাকতে পারে, সেই পরিস্থিতিতে কোড লেখার জন্য।

Content added By
Promotion

Are you sure to start over?

Loading...