Exceptions হ্যান্ডেল করা এবং তাদের থ্রো করা

Error Handling এবং Exceptions (এরর হ্যান্ডলিং এবং এক্সসেপশনস) - হ্যাস্কেল (Haskell) - Computer Programming

332

Haskell এ Exceptions হ্যান্ডেল করা এবং তাদের Throw করা

Haskell একটি purely functional language, যার মানে হলো, এটি পার্শ্বপ্রতিক্রিয়া (side effects), যেমন exceptions, হ্যান্ডল করতে সক্ষম হওয়া উচিত। Haskell এর exception handling সিস্টেম IO মোনাডের মাধ্যমে কাজ করে, যা পার্শ্বপ্রতিক্রিয়া পরিচালনা করতে সহায়ক। এই সিস্টেমটি throw এবং catch ফাংশন ব্যবহার করে exceptions ফেলে এবং সেগুলোকে হ্যান্ডল করে।

এখানে exception handling এর প্রক্রিয়া, exception throw করার পদ্ধতি এবং এর ব্যবহার সম্পর্কে বিস্তারিত আলোচনা করা হবে।


১. Exceptions Throw করা

Haskell এ exception throw করা সাধারণত throw বা throwIO ফাংশন ব্যবহার করে করা হয়, যা একটি exception তৈরি করে এবং এটি সেই মুহূর্তে হ্যান্ডেল হওয়ার জন্য IO অ্যাকশনে রিটার্ন করে।

throw ফাংশন

import Control.Exception

throwExample :: IO ()
throwExample = throw (SomeException "Something went wrong!")

এখানে, throw ফাংশনটি একটি SomeException তৈরি করছে এবং IO Monad এর মধ্যে এটি throw করছে।

throwIO ফাংশন

throwIO ফাংশনটি IO অ্যাকশন থেকে exceptions তৈরি করার জন্য ব্যবহৃত হয় এবং এটি I/O পার্শ্বপ্রতিক্রিয়া সহ exceptions তৈরি করে।

import Control.Exception

throwIOExample :: IO ()
throwIOExample = throwIO (SomeException "An I/O error occurred!")

throwIO মূলত throw এর I/O ব্যবহারের জন্য প্রস্তুত করা সংস্করণ।


২. Exceptions Catch করা

Haskell এ exceptions গুলি catch ফাংশন ব্যবহার করে হ্যান্ডল করা হয়। catch একটি IO action নেয় এবং এটি একটি exception ধরলে সেই exception এর জন্য একটি হ্যান্ডলার প্রয়োগ করে।

catch ফাংশন

import Control.Exception

handleException :: IO ()
handleException = catch throwExample handler

handler :: SomeException -> IO ()
handler ex = putStrLn ("Caught exception: " ++ show ex)

এখানে:

  • throwExample একটি exception ফেলে।
  • catch ফাংশনটি এই exception ধরে এবং handler ফাংশনটি exception হ্যান্ডল করে, যা exception এর বার্তা কনসোলে প্রিন্ট করবে।

ব্যবহার:

Prelude> handleException
Caught exception: SomeException "Something went wrong!"

এখানে, catch ফাংশনটি exception ধরে এবং handler এ পাঠিয়ে দেয়, যা exception এর বার্তা কনসোলে আউটপুট করে।


৩. try ফাংশন

try ফাংশনটি catch এর মতো কাজ করে, কিন্তু এটি Either টাইপ রিটার্ন করে, যেখানে Left অংশে exception এবং Right অংশে সঠিক ফলাফল থাকে।

উদাহরণ:

import Control.Exception

tryExample :: IO (Either SomeException String)
tryExample = try throwExample

এখানে, try ফাংশনটি throwExample এর exception ধরে এবং এর ফলস্বরূপ একটি Either রিটার্ন করে:

  • Left: যদি exception ঘটে।
  • Right: যদি exception না ঘটে।

ব্যবহার:

Prelude> tryExample
Left (SomeException "Something went wrong!")

এখানে, Left এ exception এর বার্তা থাকে। যদি কোনো exception না ঘটত, তবে Right এর মধ্যে ফলাফল থাকতো।


৪. finally এবং bracket

Haskell এ finally এবং bracket ফাংশন দুটি নিরাপদভাবে রিসোর্স ম্যানেজমেন্ট এবং পরবর্তী ক্লিন-আপ কার্যক্রম পরিচালনার জন্য ব্যবহৃত হয়। এগুলি একটি কাজ সম্পাদন করার আগে এবং পরে অবশ্যই ক্লিন-আপ কার্যক্রম সম্পাদন করতে সাহায্য করে।

finally উদাহরণ:

import Control.Exception

exampleWithFinally :: IO ()
exampleWithFinally = do
    putStrLn "Start"
    finally
        (putStrLn "Doing work..." >> throwIO (SomeException "Work failed"))
        (putStrLn "Cleaning up")

এখানে, finally ফাংশনটি প্রথমে কাজ করবে, তারপরে Cleaning up মেসেজটি আউটপুট করবে, এমনকি exception ঘটলে।

ব্যবহার:

Start
Doing work...
Cleaning up
Prelude> 

এখানে, কাজটি throwIO দ্বারা ব্যাহত হয়েছে, কিন্তু finally ফাংশনটি Cleaning up আউটপুট করেছে।

bracket উদাহরণ:

import Control.Exception

exampleWithBracket :: IO ()
exampleWithBracket = bracket
    (putStrLn "Acquire resource")         -- Acquire resource
    (putStrLn "Release resource")         -- Release resource
    (\_ -> putStrLn "Performing work")    -- Work

এখানে, bracket তিনটি অ্যাকশন সম্পাদন করে:

  1. Acquire resource: রিসোর্স অধিকার করা।
  2. Performing work: আসল কাজ করা।
  3. Release resource: রিসোর্স মুক্ত করা।

৫. Custom Exceptions

Haskell এ আপনি আপনার নিজস্ব exceptions তৈরি করতে পারেন। এর জন্য Exception টাইপ ক্লাসের একটি ইনস্ট্যান্স তৈরি করতে হবে এবং আপনার কাস্টম exception টাইপ ঘোষণা করতে হবে।

কাস্টম exception তৈরি:

import Control.Exception

data MyException = MyError String
    deriving Show

instance Exception MyException

এখানে, MyException একটি কাস্টম exception টাইপ এবং আমরা Exception টাইপ ক্লাসে এর ইনস্ট্যান্স তৈরি করেছি।

কাস্টম exception throw এবং catch:

throwMyException :: IO ()
throwMyException = throw (MyError "This is a custom exception")

handleMyException :: IO ()
handleMyException = catch throwMyException handler
    where handler (MyError msg) = putStrLn ("Caught custom exception: " ++ msg)

ব্যবহৃত:

Prelude> handleMyException
Caught custom exception: This is a custom exception

উপসংহার

Haskell এ Exceptions হ্যান্ডল করা এবং Throw করা একটি অত্যন্ত শক্তিশালী এবং সুরক্ষিত পদ্ধতি, যা IO Monad এর মাধ্যমে সম্ভব। throw এবং catch ফাংশনগুলি exceptions তৈরি এবং ধরতে সহায়ক, এবং try, finally, bracket এর মতো ফাংশনগুলি ত্রুটির হ্যান্ডলিং এবং রিসোর্স ম্যানেজমেন্টকে আরও কার্যকরী এবং নিরাপদ করে তোলে। Haskell এর exception handling সিস্টেম ফাংশনাল প্রোগ্রামিংয়ের মধ্যে পার্শ্বপ্রতিক্রিয়া নিয়ন্ত্রণ করতে অত্যন্ত সহায়ক।

Content added By
Promotion

Are you sure to start over?

Loading...