Custom Exception Handling Techniques

Exception Handling (এক্সসেপশন হ্যান্ডলিং) - টিসিএল/টিকে (Tcl/Tk) - Computer Programming

393

টিসিএল (Tcl) - Custom Exception Handling Techniques

টিসিএল (Tcl) ভাষা ডিফল্টভাবে Error Handling এর জন্য কিছু মৌলিক ফিচার প্রদান করে, যেমন catch এবং throw কমান্ড। এই ফিচারগুলো ব্যবহার করে আপনি কাস্টম এক্সসেপশন হ্যান্ডলিং তৈরি করতে পারেন, যা আপনাকে বিশেষ পরিস্থিতিতে ত্রুটি (error) মোকাবেলা এবং সেগুলিকে সঠিকভাবে পরিচালনা করতে সাহায্য করবে।

এখানে আমরা Custom Exception Handling Techniques নিয়ে আলোচনা করব, যাতে আপনি আপনার টিসিএল স্ক্রিপ্টে কাস্টম ত্রুটি (error) তৈরি করতে এবং সেগুলোর মোকাবেলা করতে পারেন।

১. Error Handling with catch

টিসিএল-এ catch কমান্ড ব্যবহার করে আপনি ত্রুটি (error) ধরতে পারেন এবং সেগুলোকে প্রক্রিয়া করতে পারেন। catch কমান্ডটি একটি ব্লক বা কমান্ড চালানোর চেষ্টা করে এবং যদি সেখানে কোনো ত্রুটি (error) ঘটে, তবে এটি ত্রুটির বার্তা ক্যাচ করে এবং আপনি সেটি পরিচালনা করতে পারেন।

catch কমান্ডের সিঙ্কট্যাক্স:

catch {command} resultVar
  • command: এটি সেই কমান্ড যা আপনি চালাতে চান।
  • resultVar: যদি কোনো ত্রুটি ঘটে, তবে ত্রুটির বার্তা এই ভেরিয়েবলে সংরক্ষিত হবে।

উদাহরণ:

set result ""
catch {set result [expr {1/0}]} result
puts "Caught error: $result"

এখানে, expr {1/0} কমান্ডটি একটি ডিভাইড বাই জিরো ত্রুটি তৈরি করবে, এবং catch কমান্ডটি সেই ত্রুটিকে ক্যাচ করে result ভেরিয়েবলে সংরক্ষণ করবে। আউটপুট হবে:

Caught error: can't divide by zero

২. Throwing Custom Errors with throw

টিসিএল-এ throw কমান্ড ব্যবহার করে আপনি নিজস্ব কাস্টম ত্রুটি তৈরি করতে পারেন। এটি সাধারণত try ব্লক এবং catch ব্লকের সাথে ব্যবহার করা হয়। আপনি throw দিয়ে কোনো কাস্টম ত্রুটি তৈরি করে সেই ত্রুটির বার্তা নির্দিষ্ট করতে পারেন।

throw কমান্ডের সিঙ্কট্যাক্স:

throw errorMessage
  • errorMessage: এটি সেই কাস্টম ত্রুটির বার্তা যা আপনি ছুঁড়তে চান।

উদাহরণ:

proc divide {a b} {
    if { $b == 0 } {
        throw "Division by zero error"
    }
    return [expr {$a / $b}]
}

# Calling the divide function with invalid input
catch {divide 10 0} errorMsg
puts "Error caught: $errorMsg"

এখানে, throw "Division by zero error" ত্রুটি ছোড়া হয়েছে যখন b শূন্য হয়। তারপর, catch কমান্ড ত্রুটিটি ক্যাচ করেছে এবং তা errorMsg ভেরিয়েবলে সংরক্ষণ করেছে। আউটপুট হবে:

Error caught: Division by zero error

৩. Custom Exception Handling with try, catch, and throw

টিসিএল-এ try, catch, এবং throw কমান্ডগুলোর সম্মিলিত ব্যবহার একটি কাস্টম এক্সসেপশন হ্যান্ডলিং মেকানিজম তৈরি করতে পারে। এই কমান্ডগুলোর মাধ্যমে আপনি ত্রুটির ধরন এবং তার কার্যকরী পদক্ষেপ পরিচালনা করতে পারেন।

try, catch, এবং throw এর একত্রিত ব্যবহার:

সিনট্যাক্স:

try {
    # Code that may cause an error
} catch {errorType errorMessage} {
    # Handle specific error type
} finally {
    # Code to always execute (optional)
}
  • try: আপনি যে কোডটি পরীক্ষা করতে চান, সেটি এখানে লেখা হয়।
  • catch: যদি কোনো ত্রুটি ঘটে, তবে ত্রুটির ধরন এবং বার্তা এখানে ধরা হবে।
  • finally: এটি ঐচ্ছিক। যদি ত্রুটি ঘটে বা না ঘটে, এটি সর্বদা এক্সিকিউট হবে।

উদাহরণ (কাস্টম এক্সসেপশন হ্যান্ডলিং):

proc divide {a b} {
    try {
        if { $b == 0 } {
            throw "Division by zero error"
        }
        return [expr {$a / $b}]
    } catch {Division by zero error} {
        puts "Error: Cannot divide by zero."
    } catch {default} {
        puts "An unexpected error occurred."
    } finally {
        puts "Execution completed."
    }
}

# Test cases
divide 10 0    ;# আউটপুট: Error: Cannot divide by zero. Execution completed.
divide 10 2    ;# আউটপুট: Execution completed.

এখানে, divide ফাংশনটি ডিভাইড বাই জিরো ত্রুটি তৈরি করলে কাস্টম ত্রুটি বার্তা "Division by zero error" ছুড়ে দিচ্ছে। এরপর catch ব্লকটি সেই ত্রুটি ধরা এবং প্রক্রিয়া করছে। finally ব্লকটি ত্রুটি ঘটুক বা না ঘটুক, সর্বদা এক্সিকিউট হয়।

৪. Exception Propagation

আপনি যখন একটি ত্রুটি throw করেন, তা টিসিএল স্ক্রিপ্টের মাধ্যমে আগের দিকে চলে যেতে পারে (propagate) এবং ঐখানে ক্যাচ করা যেতে পারে। এটি আপনার স্ক্রিপ্টের বিভিন্ন স্তরের ত্রুটি হ্যান্ডলিংকে আরও নমনীয় এবং সক্ষম করে তোলে।

উদাহরণ (Exception Propagation):

proc innerProcedure {} {
    throw "Inner procedure failed"
}

proc outerProcedure {} {
    try {
        innerProcedure
    } catch {Inner procedure failed} {
        puts "Caught in outer procedure: $errorMessage"
    }
}

outerProcedure  ;# আউটপুট: Caught in outer procedure: Inner procedure failed

এখানে, innerProcedure ত্রুটি ছুড়ে দিয়ে outerProcedure এর মাধ্যমে প্রপাগেট হয়েছে এবং catch ব্লক দ্বারা ধরা হয়েছে।

৫. Custom Error Messages

টিসিএল-এ কাস্টম ত্রুটি বার্তা ছুড়তে আপনি নিজের নির্দিষ্ট বার্তা প্রদান করতে পারেন। এই বার্তা আপনার স্ক্রিপ্টের বিভিন্ন স্থানে বিভিন্ন পরিস্থিতিতে ব্যবহার করা যেতে পারে।

উদাহরণ (Custom Error Message):

proc validateNumber {num} {
    if { $num < 0 } {
        throw "Negative number error: $num is less than zero"
    }
    return $num
}

catch {validateNumber -5} errorMsg
puts "Caught error: $errorMsg"

এখানে, একটি কাস্টম ত্রুটি বার্তা "Negative number error: -5 is less than zero" তৈরি করা হয়েছে এবং এটি throw দ্বারা ছোড়া হয়েছে।

উপসংহার

টিসিএল-এ Custom Exception Handling করার জন্য try, catch, এবং throw কমান্ড ব্যবহার করা হয়। এই কৌশলগুলি আপনাকে আপনার স্ক্রিপ্টে কাস্টম ত্রুটি তৈরি করতে, ত্রুটি হ্যান্ডলিং করতে, এবং ত্রুটির বার্তা প্রেরণ এবং গ্রহণ করতে সহায়তা করে। সঠিকভাবে Exception Handling ব্যবহার করে কোডের কার্যকারিতা এবং নির্ভরযোগ্যতা বৃদ্ধি করতে সাহায্য করতে পারে।

Content added By
Promotion

Are you sure to start over?

Loading...